gpt4 book ai didi

java - 通过 TCP 将数据从 Node.js 发送到 Java

转载 作者:可可西里 更新时间:2023-11-01 02:37:47 24 4
gpt4 key购买 nike

我正在尝试通过 TCP 套接字(使用 protobuf 序列化)从 Node.js 向 Java 发送消息(字节数组)。

我在 java 端创建一个服务器套接字,并从 Node 连接到它:

var client = net.createConnection(12345, "localhost")

client.addListener("connect", function(){
client.write(serializedMsg1)
client.end(serializedMsg2)
})

在 java 端,我从输入流中获取内容并将其反序列化:

Protocol1.parseFrom(inputStream);
Protocol2.parseFrom(inputStream);

问题如下 - 看起来只有 serializedMsg2 被传递/反序列化,而 serializedMsg1 被忽略。据我了解,它发生了,因为字节流没有定界,并且应该明确指定数据 block 的大小。不应在 Java 端直接从流中读取数据 - 应首先读取带分隔符的 block ,然后将其反序列化为字节数组。

最佳答案

您可以使用 Buffer 将您正在写入的数据 block 的大小传递给流:

function writeInt(stream, int){
var bytes = new Array(4)
bytes[0] = int >> 24
bytes[1] = int >> 16
bytes[2] = int >> 8
bytes[3] = int
stream.write(new Buffer(bytes))
}

...

writeInt(client, data.length)
client.write(data)

在 Java 方面:

int size = inputStream.readInt();
byte[] result = new byte[size];
inputStream.read(byteArray);

关于java - 通过 TCP 将数据从 Node.js 发送到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4021813/

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