日期:2014-05-18  浏览次数:21095 次

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很早就有。一直都没有解决。