0

我正在开发一个服务器-客户端应用程序。服务器用 Java (PC) 完成,客户端用 Java 完成。(安卓)

我在以下实现中遇到问题:

服务器抓取位图 -> 原始字节 -> TCP -> 客户端(异步流

现在字节数组在客户端以多个不同长度的数据包传递。所以要正确处理这个问题,我应该使用前缀方法。

要使用前缀模式,您需要将消息的长度(以字节为单位)发送为四个字节,然后发送消息

我的代码

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 中实现它的任何帮助?

4

1 回答 1

3

使用DataOutputStream

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。虽然这在您的摘录中未指定,但我想这是预期的。

同样,在接收端,您可以使用 a DataInputStream,将长度作为 int 读取,然后读取有效负载。

于 2013-01-11T22:23:32.953 回答