2013-03-23 30 views
-2

如何发送一个1kb的消息在java中,我试图从一台机器发送消息到另一台,固定大小的1kb,这怎么能实现?如何发送一个1kb大小的消息java

目前我能够发送消息,如计算机之间的“测试”,但理想的我希望能够送1KB

一个固定大小的消息,这就是我目前如何发送测试

if (myrank == 0) { 
    char[] mess = " test ".toCharArray(); 
    MPI.COMM_WORLD.Send(mess, 0, mess.length, MPI.CHAR, 1, 99); 
} 

目前,这是为什么我发送消息机器之间:

import mpi.* ; 

class Hello { 

    static public void main(String[] args) { 
    MPI.Init(args); 
int myrank = MPI.COMM_WORLD.Rank(); 
long startTime = System.currentTimeMillis(); 
if (myrank == 0) { 
    char[] mess = " test ".toCharArray(); 
    MPI.COMM_WORLD.Send(mess, 0, mess.length, MPI.CHAR, 1, 99); 
} else { 
    char[] mess = new char[20]; 
    MPI.COMM_WORLD.Recv(mess, 0, 20, MPI.CHAR, 0, 99); 
    System.out.println("received:" + new String(mess)); 
} 

long endTime = System.currentTimeMillis(); 
long duration = endTime - startTime; 
System.out.println(duration); 
    MPI.Finalize(); 
    } 
} 

将一个字节数组是一个很好的解决方案呢?

需要固定大小的消息,以帮助例如基准测试结果我期待采取发送1KB的消息,1MB,20MB ........ 1GB等

编辑时间的增加比较:

这项工作?这会发送8位?

int i = 10; 

String text = String.format("%08d", i); 
// text now contains "00000010" 
// 8 bits 
+2

能否请您加入为什么你需要一个固定的大小? – Simulant 2013-03-23 20:17:07

+0

确实。这听起来像一个XY问题机器之间需要为我的基准平次 – Doorknob 2013-03-23 20:17:25

+0

固定的尺寸,最好是在尺寸 – user2065929 2013-03-23 20:20:02

回答

1

如果你想发送一个1kb的消息,创建一个大小为1kb的消息并发送它。

import mpi.* ; 

class Hello { 

    static public void main(String[] args) { 

     MPI.Init(args); 
     int myrank = MPI.COMM_WORLD.Rank(); 
     int tag = 99; 

     long startTime = System.currentTimeMillis(); 
     if (myrank == 0) { 
      char[] mess = new char [1024]; 
      MPI.COMM_WORLD.Send(mess, 0, mess.length, MPI.CHAR, 1, tag); 
     } else if (myrank == 1) { 
      char[] mess = new char[1024]; 
      MPI.COMM_WORLD.Recv(mess, 0, 1024, MPI.CHAR, 0, tag); 
      System.out.println("received:" + new String(mess)); 
     } 

     long endTime = System.currentTimeMillis(); 
     long duration = endTime - startTime; 
     System.out.println(duration); 
     MPI.Finalize(); 
    } 
} 

更妙的是,衡量乒乓延迟,这是更好的界定(往返回程时间),并使用多种长度:

import mpi.* ; 

class Hello { 

    static public void main(String[] args) { 

     MPI.Init(args); 
     int myrank = MPI.COMM_WORLD.Rank(); 
     int tag = 99; 
     int maxlen = 512*1024*1024; 
     int minlen = 64; 
     char [] sendbuff = new char [maxlen]; 
     char [] recvbuff = new char [maxlen]; 


     if (myrank == 0) { 
      for (int len = minlen; len < maxlen; len *= 4) { 
       long startTime = System.currentTimeMillis();      
       MPI.COMM_WORLD.Send(sendbuff, 0, len, MPI.CHAR, 1, tag); 
       MPI.COMM_WORLD.Recv(recvbuff, 0, len, MPI.CHAR, 1, tag); 
       long endTime = System.currentTimeMillis(); 
       long duration = endTime - startTime; 
       System.out.println("Ping-pong time for " + len + " is " + duration); 
      } 
     } else if (myrank == 1) { 
      for (int len = minlen; len < maxlen; len *= 4) { 
       MPI.COMM_WORLD.Recv(recvbuff, 0, len, MPI.CHAR, 0, tag); 
       MPI.COMM_WORLD.Send(recvbuff, 0, len, MPI.CHAR, 0, tag); 
      } 
     } 


     MPI.Finalize(); 
    } 
} 
0

上在接收所述发送(发起)侧和ServerSocket使用Socket(侦听消息)侧。 Socket允许打开输出流,ServerSocket可以产生另一个可以打开输入流的Socket。如果消息的大小是固定的,则没有多大区别。

您还可以使用SOAP,RMI,Protocol Buffers,CORBA,MPI等。这些将增加更多的复杂性,但也增加了功能,每个应用领域都很强大。