【问题标题】:NodeJs tcp socket receive chunkNodeJs tcp 套接字接收块
【发布时间】: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


    【解决方案1】:

    我找到了这个代码easysocket!类似于我想要的,我只是对代码进行了简单的编辑,它的工作就像魅力一样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-13
      • 2012-12-28
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多