إرسال بيانات من Node.js إلى Java عبر TCP
-
26-09-2019 - |
سؤال
أحاول إرسال رسائل (صفائف بايت) من Node.js إلى Java عبر مقبس TCP (تسلسل مع protobuf).
أقوم بإنشاء مقبس خادم على جانب جافا ، وأتصل به من العقدة:
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 - يجب قراءة الأجزاء المحددة أولاً ، وأن يتم إلحاقها بمصفوفات البايت بعد ذلك.
المحلول
يمكنك استخدام 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)
على جانب جافا:
int size = inputStream.readInt();
byte[] result = new byte[size];
inputStream.read(byteArray);
لا تنتمي إلى StackOverflow