Node.js如何使用net.Server处理数据包碎片

Node.js如何使用net.Server处理数据包碎片,node.js,tcp-ip,Node.js,Tcp Ip,当net.Server接收到超过1500字节(默认mtu)的数据时,“on data”事件将与数据包的每个片段一起执行。有没有一种方法可以在一次“on data”呼叫中接收整个数据包 谢谢。试试这个 var sys=require('sys'); var净=要求(‘净’);; var socktimeout=600000; var svrport=您的_端口; var svr=net.createServer(函数(sock){ var mdata=新缓冲区(0); //sys.put('Co

当net.Server接收到超过1500字节(默认mtu)的数据时,“on data”事件将与数据包的每个片段一起执行。有没有一种方法可以在一次“on data”呼叫中接收整个数据包

谢谢。

试试这个

var sys=require('sys');
var净=要求(‘净’);;
var socktimeout=600000;
var svrport=您的_端口;
var svr=net.createServer(函数(sock){
var mdata=新缓冲区(0);
//sys.put('Connected:'+sock.remoteAddress+':'+sock.remotePort);
setTimeout(socktimeout,函数(){
袜子结束(“超时”);
sock.destroy();
});
sock.on('data',函数(data){
如果(mdata.length!=0)
{
var tempBuf=Buffer.concat([mdata,data]);
mdata=tempBuf;
}
其他的
{
mdata=数据;
}
var len=获取您的包装长度(mdata);
if(mdata.length==len)
{
做好你的工作(mdata)
mdata=新缓冲区(0);
}
});
on('error',function(err){//处理连接错误。
sys.put('error:'+err+'\n');
});
});

svr.倾听(svrport)为什么?如果需要的话,只需将数据块连接在一起即可。有数百个源发送数据,源id位于数据包的开头。如果一个数据包是片断的,我无法识别以下数据块的来源。你能展示你的代码吗?通常你在套接字上工作,你不会像这样处理数据包……代码太大了。传递给“onconnection”事件的套接字必须处理多种事件类型。我不能在收到事件后简单地连接它们。我相信如果你不知道数据包有多大,这是没有用的。我认为应该可以检查数据报的以太网片段长度、frag_标志和偏移量。为了更好地理解: