2
当net.Server接收超过1500字节(默认mtu)的数据时,会在数据包的每个片段中执行'on data'事件。有没有一种方法可以在单个“数据”调用中接收整个数据包?Node.js如何使用net处理数据包分段。服务器
谢谢。
当net.Server接收超过1500字节(默认mtu)的数据时,会在数据包的每个片段中执行'on data'事件。有没有一种方法可以在单个“数据”调用中接收整个数据包?Node.js如何使用net处理数据包分段。服务器
谢谢。
试试这个
var sys = require('sys');
var net = require('net');;
var socktimeout = 600000;
var svrport = your_port;
var svr = net.createServer(function(sock) {
var mdata = new Buffer(0);
//sys.puts('Connected: ' + sock.remoteAddress + ':' + sock.remotePort);
sock.setTimeout(socktimeout,function(){
sock.end("timeout");
sock.destroy();
});
sock.on('data', function(data) {
if(mdata.length != 0)
{
var tempBuf = Buffer.concat([mdata, data]);
mdata = tempBuf;
}
else
{
mdata = data;
}
var len=got_your_Packget_length(mdata);
if(mdata.length == len)
{
do_your_job(mdata)
mdata = new Buffer(0);
}
});
sock.on('error', function(err) { // Handle the connection error.
sys.puts('error: ' + err +'\n');
});
});
svr.listen(svrport);
如果你不知道数据包有多大,我相信这没用。我认为应该可以检查数据报的以太网分段长度,frag_flag和偏移量。为了更好的理解:http://stackoverflow.com/questions/15999739/ip-fragmentation-and-reassembly – Sander
为什么?如果你需要一块,只需连接块。 –
有数百个源发送数据,source_id在数据包的开头。如果数据包被分段,我无法识别以下数据块的来源。 –
你能显示你的代码吗?通常你在套接字上工作,你不会像这样处理数据包...... –