Domanda

Sto cercando di inviare messaggi (array di byte) da Node.js a Java tramite il socket TCP (serializzato con protobuf).

I creare un server socket sul lato Java, e collegare ad esso dal nodo:

var client = net.createConnection(12345, "localhost")

client.addListener("connect", function(){
    client.write(serializedMsg1)
    client.end(serializedMsg2)
})

Sul java lato sto recupero del contenuto dal flusso di input e deserializzazione è:

Protocol1.parseFrom(inputStream);
Protocol2.parseFrom(inputStream);

Il problema sta seguendo - Sembra solo serializedMsg2 viene passato / deserializzati, mentre serializedMsg1 viene ignorato. Intendo che accade, perché il flusso di byte non è delimitato, e la dimensione dei blocchi di dati deve essere specificata in modo esplicito. I dati non devono essere lette direttamente dal flusso sul lato java -. Chunkds delimeted dovrebbe essere letto prima, e deserializzato come array di byte successiva

È stato utile?

Soluzione

È possibile utilizzare Buffer al fine di superare la dimensione dei dati-pezzo che si sta scrivendo al flusso:

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)

Sul lato Java:

int size = inputStream.readInt();
byte[] result = new byte[size];
inputStream.read(byteArray);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top