gpt4 book ai didi

java - 使用 TCP 连接获取字节数组

转载 作者:可可西里 更新时间:2023-11-01 02:32:20 27 4
gpt4 key购买 nike

我之前使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com