Сокет NodeJS tcp получает фрагмент

#node.js

#node.js

Вопрос:

 const net = require('net')
const sockets = []
server.on('connection', sock => {
 log("tcp_server", "info", `Connected at ${sock.remoteAddress}:${sock.remotePort}`)

 sockets.push(sock);
    
 // Write the data back to all the connected, the client will receive it as data from the server
 sockets.forEach((sock, index, array) => {
             
 })




sock.on('data', data => {




})

// Add a 'close' event handler to this instance of socket
sock.on('close', data => {

})  // end sock.on
})  


 
server.listen(conf.port, conf.serverHost, () => {
    const address = server.address()
    const port = address.port
    const family = address.family
    const ipaddr = address.address
    
    log("tcp_server", "info", 'Server is listening at port '   port)
    log("tcp_server", "info", 'Server ip :'   ipaddr)
    log("tcp_server", "info", 'Server is IP4/IP6 : '   family)
})   
  

это мой сокет tcp-сервер
, и я столкнулся с проблемой с получением данных фрагмента на c #. легко получить каждый фрагмент, если я знаю его размер,
и я могу контролировать, сколько байтов я хочу получать каждый раз

теперь в NodeJS я могу получить длину буфера, получив первые 5 байт, а затем получить размер сообщения

 var size = (buff[1] << 24) | (buff[2] << 16) | (buff[3] << 8) | buff[4];
  

я попробовал этот простой код для получения данных блока и их обработки

сначала я определяю буфер в top

 var mybuffer = Buffer.alloc(30);
var length = 0;
 

sock.on('data', data => {


data.copy(mybuffer, length , 0, data.length); //copy buffer to mybuffer
length  = data.length;

//now check if my length is 5 or greater i can determine the buffer size i sent
 size = (buff[1] << 24) | (buff[2] << 16) | (buff[3] << 8) | buff[4];

 //now need to continue receive until i reach (size - length) = total bytes i sent

})
  

это то, что я пытался получить весь фрагмент, но все еще нуждается в дополнительной работе
любая идея, как получить все данные, зависит от размера, который я отправил в первые 5 байтов каждого сообщения

Ответ №1:

Я нашел этот код easysocket! подобно тому, что я хочу, я просто внес простое редактирование в код, и его работа выглядит как шарм