100分变态问题:异步Socket快速发送时导致客户端缓冲区溢出,高手请进。
钟奎 2005-06-22 09:55:00 服务器端:开10个Thread向客户端Socket.BeginSend发送数据包,每包180个字节,在回调时,不在EndSend前Thread.Sleep(10),客户端一段时间后就会接收到错误的消息结构,接着就解析失败退出了。打印了客户端缓冲区buffer的消息,发现了一个规律:5个180字节的数据包,最后一个是124字节的数据包,计算长度:5 x 180 + 124 = 1024,这不是客户端定义的buffer大小吗?问题找到了,原来服务器发送太快,客户端来不及处理,缓冲区被填满了,导致错误。
现在的解决办法就是上述的Thread.Sleep(),这样做延迟回调完成的时间,基本上保证了客户端能及时处理数据,但不科学。
变态问题:服务器端能不能计算获得客户端缓冲区(已知大小1024),还有多少空闲,有就发送,不够就等待,请高手列出计算方法.....