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

通过TCP将数据从Node.js发送到Java,java,tcp,node.js,protocol-buffers,Java,Tcp,Node.js,Protocol Buffers,我正试图通过TCP套接字(用protobuf序列化)将消息(字节数组)从Node.js发送到Java 我在java端创建了一个服务器套接字,并从节点连接到它: var client = net.createConnection(12345, "localhost") client.addListener("connect", function(){ client.write(serializedMsg1) client.end(serializedMsg2) }) 在java

我正试图通过TCP套接字(用protobuf序列化)将消息(字节数组)从Node.js发送到Java

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

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端的流中读取数据-应首先读取已删除数据块,然后将其反序列化为字节数组。

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

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()的示例吗?你真是太好了!