A Client在不断开连接的时候, B Client 监听的 data 事件被触发后, 怎么确保数据是完整的?
发布于 8 年前 作者 laomayi 2961 次浏览 来自 问答

嗨! 大家好! 先秀一段代码:

'use strict'

var net = require('net');
var client = new net.Socket();

// 连接到 B Client
client.connect(port, ip, function() {

});
client.on('data', function(data) {
     // 怎么确保已经获取了所有数据?
});

假设上述代码是 A Client 端连接到 B Client. 连接成功后, 接着 B Client 给 A Client 发了很长很长的数据, 于是就会触发 B Client 所监听的data事件. 这个时候, A Client 没有断开连接. 那么怎么确保 B Client 已经获取到所有的数据? 这里没有确定的数据格式.

监听 end事件很明显是行不通的, 因为这个事件只有在对方断开连接后才会触发. 所以就没有如下这样的解决方式了:

'use strict'

var net = require('net');
var client = new net.Socket();

client.connect(port, ip, function() {

});

var buffers = [];
client.on('data', function(data) {
    buffers.push(data);
});
client.on('end', function() {
    console.log(Buffer.concat(buffers));
});

也许是我不太懂网络, 所以我这个问题可能让你们感到很好笑. 任务紧急的原因, 让我目前没得时间去啃 TCP/IP 协议的书. 望大家指点下. 多谢了!

1 回复

此问题无解. 关闭问题.

回到顶部