我见别人都这样写
我的为什么不行string strInfo = "";
              try
              {                  byte[] bytInfo = new byte[1024];                  int intInfo= socket.Receive(bytInfo, bytInfo.Length, 0);
                  strInfo = System.Text.Encoding.UTF8.GetString(bytInfo, 0, intInfo);                  while (intInfo> 0)
                     { 
                      MessageBox.Show("ok");
                      intInfo= socket.Receive(bytInfo, bytInfo.Length, 0);
                      strInfo = strInfo + System.Text.Encoding.UTF8.GetString(bytInfo, 0, intInfo);
                  }
                  MessageBox.Show("还不执行?");
              }
                catch
               {}
//现在的问题是怎样才能让它执行这句   MessageBox.Show("还不执行?");

解决方案 »

  1.   

    while (intInfo.Length> 0) 
      

  2.   

    socket.ReceiveTimeout =2000;如设这个,倒可以但如果客端崩溃,也可以catch 不知怎样把这两种情况分开
      

  3.   


                      while (intInfo> 0) 
                         {  
                          MessageBox.Show("ok"); 
                          intInfo= socket.Receive(bytInfo, bytInfo.Length, 0); 
                          strInfo = strInfo + System.Text.Encoding.UTF8.GetString(bytInfo, 0, intInfo); 
                      } 
    你这个循环写得有问题,如果Receive接收到了数据,就会继续下一次读操作,又读到了,又会开始下一次...但是,读到结束了的时候,读不到数据了,Receive就不会返回了,结果就停在这儿不动了。
      

  4.   

    至于Timeout与客户端崩溃的情形如何区分,给你看一段文档:如果收到 SocketException,请使用 SocketException.ErrorCode 属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。