socket的接受0字节的处理
初学socket 开发
遇到一个问题:
问题描述:
当服务器接受了客户端的连接之后,进入循环接收数据过程中,
在一下情况下:
1)客户端异常退出。
2)客户端正常退出,但是没有通知服务器端。
服务器端接收数据都出现接受0字节,并且由阻塞进入到无线循环当中。
代码如下:
while (true)
{
try
{
if (handler.Poll(-1, SelectMode.SelectRead))
{
int bytesRec = handler.Receive(bytes);
data = Encoding.ASCII.GetString(bytes, 0, bytesRec);
Console.WriteLine("Text received : {0}", data);
if (data == "exit")
{
Console.WriteLine("客户端请求连接断开!");
break;
}
handler.Send(Encoding.ASCII.GetBytes(data));
}
}
catch (Exception err)
{
Console.WriteLine("Client Err:" + err.Message.ToString());
break;
}
}
另外handler.Poll(-1, SelectMode.SelectRead),是什么作用,根据MSDN的解释判断socket的状态,但是我并没理解他的用途,去掉它似乎也可以,阻塞停留在handler.Receive而已,依然没有任何的影响。
------解决方案--------------------
.net 的一个bug很早就有。一直都没有解决。