【问题标题】:Sending data from Node.js to Java over TCP通过 TCP 将数据从 Node.js 发送到 Java
【发布时间】:2011-04-30 15:00:54
【问题描述】:

我正在尝试通过 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 端的流中读取数据 - 应首先读取分隔的 chunkd,然后将其反序列化为字节数组。

【问题讨论】:

    标签: java tcp node.js protocol-buffers


    【解决方案1】:

    您可以使用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);
    

    【讨论】:

    • 能否添加C# readInt() 的样本?你真是太好了!
    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2020-08-17
    • 2018-12-19
    相关资源
    最近更新 更多