首页 文章

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

提问于
浏览
2

我正在尝试通过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 被忽略 . 据我所知,它发生了,因为字节流没有分隔,应该明确指定数据块的大小 . 不应直接从java端的流中读取数据 - 应首先读取已分隔的块,然后将其反序列化为字节数组 .

1 回答

  • 4

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

    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);
    

相关问题