#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! подобно тому, что я хочу, я просто внес простое редактирование в код, и его работа выглядит как шарм