【发布时间】:2021-01-14 16:37:28
【问题描述】:
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];
我尝试了这个简单的代码来获取块数据并处理它
首先我在顶部定义一个缓冲区
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 个字节上发送的大小
【问题讨论】:
标签: node.js