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);
}
}
}
}
あなたがしていることは無意味です。 TCPはストリームベースです。アプリケーションレベルで99バイトまたは198バイトのパケットはありません。すでに40バイトと59バイトの読み込みで、最初の99バイトをデリバリーすることができます。そして、たとえあなたが一度に198byteを書き込もうとしても、反対側はまったく異なるチャンクでそれらを読むかもしれません。 – Matthias247
私はそれを行う方法がある場合、どのようにその無意味な参照してください。 – J4VA