我正在开发一个服务器客户端应用程序。 服务器在Java(PC)中完成,客户端在Java中完成。 (机器人)
我遇到以下实施问题:
服务器抓取位图 - >原始字节 - > TCP - >客户端(Async Streams
现在,字节数组在客户端中以不同长度的多个数据包传递。所以为了正确处理这个问题,我应该使用前缀方法。
要使用前缀模式,您需要以字节为单位发送消息的长度 作为四个字节,然后是消息
我的代码
public void sendScreenshot(byte[] buffer) throws IOException {
OutputStream os = socket.getOutputStream();
os.write(buffer.length + 1);
os.write((byte) 0);
os.write(buffer, 0, buffer.length);
os.flush();
}
在VB.net中,这可以通过以下代码实现:
Private Sub dat(ByVal dat As String)
Dim nstream As NetworkStream = sock.GetStream()
Dim bit As Byte() = System.Text.Encoding.UTF8.GetBytes(dat)
Dim bw As New BinaryWriter(sock.GetStream())
bw.Write(bit.Length + 1)
bw.Write((byte)command)
bw.Write(bit, 0, bit.length)
End Sub
欢迎使用Java实现它的任何帮助吗?
答案 0 :(得分:3)
DataOutputStream out = new DataOutputStream(os);
out.writeInt(buffer.length + 1);
// This writes a single byte
out.write(0);
out.write(buffer);
out.flush();
.writeInt()
来自您引用文本的这一部分:
您需要以字节为单位发送消息的长度为四个字节
表示int
。请注意,这将按网络顺序写入int。虽然这在您的摘录中未指定,但我认为这是预期的。
同样,在接收端,您可以使用DataInputStream
,将长度读作int,然后读取有效负载。