我之前使用 UDP
发送/接收数据,但现在我想切换到 TCP
以避免丢包。
我阅读了一些关于 TCP
的教程并注意到 TCP
使用的不是像 UDP
那样的 DatagramPacket,而是使用 InputStream/OutputStream。
我们如何从DataInputStream中获取byte[],类似这样的东西:
byte[] receiveData = new byte[64000];
DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
receiveData=receivePacket.getData();
最佳答案
为了在套接字(流)上实现基于消息的协议(protocol),您基本上需要想出一些消息格式,然后在连接的两端读/写它。一个非常简单的格式是将消息的长度写入一个 4 字节的 int,然后发送消息字节(然后刷新流)。在接收端,读取一个 4 字节的 int,然后读取后面的字节数(注意限制读取方法调用,否则您可能会不小心读取下一条消息的一部分)。
public void writeMessage(DataOutputStream dout, byte[] msg, int msgLen) {
dout.writeInt(msgLen);
dout.write(msg, 0, msgLen);
dout.flush();
}
public byte[] readMessage(DataInputStream din) {
int msgLen = din.readInt();
byte[] msg = new byte[msgLen];
din.readFully(msg);
return msg;
}
关于java - 使用 TCP 连接获取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11588078/