2017-05-30 21 views
0

2つのTCPパケットを1つにマージする必要があります。私は、csvファイルから1行のデータを読み込み、1秒ごとに2つの99バイトのバイナリパケットに各行のデータを出力するソケットエミュレータを作成しました。これら2つの99バイトパケットを1つの198バイトパケットにマージする別のエミュレータを作成する必要があります。2つの99バイトのTCPパケットを1つの198バイトのTCPパケットにマージします。

これは私がここまでまとめたもので、基本的に1つのエミュレータから両方の99バイトパケットを転送し、2つの99バイトパケットとしてクライアントに中継します。私はいくつかのことを試しましたが、2つを1つの198バイトのパケットにマージする方法を考え出すことはできません。シンプルに聞こえますが、私はそれの周りに私の頭を包むことはできません、提案は非常に高く評価されます。おかげ

package PacketFuser; 

    import java.io.ByteArrayOutputStream; 
    import java.io.DataInputStream; 
    import java.io.IOException; 
    import java.net.InetAddress; 
    import java.net.ServerSocket; 
    import java.net.Socket; 

    public class PacketFuser { 

    public static void main(String args[]) throws IOException{ 
     //Start server 
     Socket socket = null; 
     final ServerSocket ss = new ServerSocket(6666); 
     System.out.println("Waiting on connection..."); 
     while (ss.isBound()){ 
      try { 
       socket = ss.accept(); 
       System.out.println("Connected to port: " +socket.toString()); 
       } 
       catch (IOException e){ 
       } 

     //Start Client Socket 
     InetAddress address=InetAddress.getLocalHost(); 
     Socket c1=null; 
     boolean client = false; 

     while (client == false){ 
     try{ 
     System.out.println("waiting on Emulator"); 
     Thread.sleep(1000); 
     c1=new Socket(address, 31982); 
     client = true; 
     } 
     catch (IOException e){} 
     catch (InterruptedException ex) {} 
     } 
     System.out.println("Emulator Connected"); 


    //I need to figure out here how to catch two packets and merge them into one 198 byte packets here. 

     DataInputStream in = new DataInputStream(s1.getInputStream()); 
     ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
     int pread; 
     byte[] p1 = new byte[99]; 

     while ((pread = in.read(p1, 0, p1.length)) != -1) { 
     buffer.write(p1, 0, pread); 
     buffer.flush(); 
     socket.getOutputStream().write(p1); 
     } 

      } 
     } 
    } 
+1

あなたがしていることは無意味です。 TCPはストリームベースです。アプリケーションレベルで99バイトまたは198バイトのパケットはありません。すでに40バイトと59バイトの読み込みで、最初の99バイトをデリバリーすることができます。そして、たとえあなたが一度に198byteを書き込もうとしても、反対側はまったく異なるチャンクでそれらを読むかもしれません。 – Matthias247

+0

私はそれを行う方法がある場合、どのようにその無意味な参照してください。 – J4VA

答えて

0

new byte[198]ための変更new byte[99]

+1

これは助け!ありがとうdemogorii ..私はちょうど彼らが198バイトのパケットで正しくストリーミングされることを確実にするために内部の一意の識別子でパケットを並べ替える必要があります。 – J4VA

関連する問題