[英]Sending data from Node.js to Java over TCP
我正在嘗試通過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
,而serializedMsg1
被忽略。 據我了解,它的發生是因為字節流沒有定界,並且數據塊的大小應明確指定。 不應直接從Java端的流中讀取數據-應當首先讀取經過修飾的塊,然后再將其反序列化為字節數組。
您可以使用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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.