2013-03-23 31 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等。這些將增加更多的複雜性,但也增加了功能,每個應用領域都很強大。