NetWorkStream.Read() 的问题 。
本帖最后由 dota3c 于 2014-03-11 21:44:59 编辑
我写了C/S的抓包程序,大概工作机制是这样的:服务器端不停的将抓到数据包的包头提取出来,刚好是61个字节,用TCP协议发送给客户端,客户端用61个字节的缓存去读,为什么有时候读取的字节数不是61呢?(大多数时候是正常的)。
服务器端采用异地发送方式:
byte[] buffer=new byte[61];
//....将抓到包头放进去
ns.BeginWrite(buffer,0,buffer.Length,sendCallBack,this);
客户端的代码是:
byte[] buffer=new byte[61];
int numOfBytesRead=ns.Read(buffer,0,buffer.Length);
if(numOfBytesRead==61)
{
//有时候会出现numOfBytesRead=16 ,26的情况
//分析这个数据包,
}
这是为什么呢?
------解决方案--------------------这正常呀,TCP会把数据包分成多个包分开发,所以有时你收到的是16,而有时会把两个包粘在一起,一起发过来。
------解决方案--------------------哦 我理解你的意思了 你是说外面还会有个循环机制
理论上可以, 但你要保证ns一直有效