Java 将两个99字节的TCP数据包合并为一个198字节的TCP数据包。

Java 将两个99字节的TCP数据包合并为一个198字节的TCP数据包。,java,sockets,tcp,Java,Sockets,Tcp,我需要将两个TCP数据包合并为一个。我编写了一个套接字模拟器,它从csv文件中读取一行数据,并每秒将每行数据输出到两个99字节的二进制数据包中。我现在需要编写另一个模拟器,将这两个99字节的数据包合并成一个198字节的数据包 这就是我到目前为止所做的,它基本上从一个模拟器转发两个99字节的数据包,并将其作为两个99字节的数据包转发给客户端。我尝试了两种不同的方法,但似乎不知道如何将这两种方法合并成一个198字节的数据包。听起来很简单,但我不能把我的头围绕它,建议将不胜感激。谢谢 packag

我需要将两个TCP数据包合并为一个。我编写了一个套接字模拟器,它从csv文件中读取一行数据,并每秒将每行数据输出到两个99字节的二进制数据包中。我现在需要编写另一个模拟器,将这两个99字节的数据包合并成一个198字节的数据包

这就是我到目前为止所做的,它基本上从一个模拟器转发两个99字节的数据包,并将其作为两个99字节的数据包转发给客户端。我尝试了两种不同的方法,但似乎不知道如何将这两种方法合并成一个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);
        }

            }
        }
    }

新字节[99]
更改为
新字节[198]

您所做的是毫无意义的。TCP是基于流的-在应用程序级别上没有99字节或198字节的数据包。通过40字节和59字节的读取,您可以获得前99字节的数据。即使你试图一次写入198字节,另一方也可能以完全不同的块读取这些数据。我不认为如果有办法做到这一点是毫无意义的。这很有帮助!谢谢demogorii。。我现在需要使用内部的唯一标识符对数据包进行排序,以确保它们在198字节的数据包中正确传输。