//Socket
if (s != null)
{
    if(s.Connected)
       s.Shutdown(SocketShutdown.Both);
    s.Close();
}
这么写有什么问题么? 为什么每次关闭程序就卡住不动了.win7 + .net2.0(其他操作系统没有问题.)

解决方案 »

  1.   

    为什么每次关闭程序就卡住不动了.
    上面意识?  s.Shutdown(SocketShutdown.Both);
     起的是 禁止通行 类似的方法还有 DisConnect 如果直接断开 直接 调用 Close 就好了 
      

  2.   


    就算放到另一个线程去关闭Socket 程序(窗体)也会停止响应. 其他线程没有问题依然正常运行着.
     
      

  3.   

    if (s != null)
    {
        if(s.Connected) //当它返回 false 时,表明 Socket 要么从未连接,要么已断开连接。
           s.Shutdown(SocketShutdown.Both);
        else 
           s.Close();
    }
      

  4.   

    可能是我没说清楚.假如说 一个窗体有2个按钮 一个是连接服务器 另一个是断开反复点连接 和断开. 然后程序窗体就停止响应了. 但是 后台其他线程的执行依然继续着.又比如说 窗体上还有个label 一个线程在随时更改这个label的值 我点击连接 和断开连接 现在也放入新的线程中操作现在一共有3个线程  1是窗体 2是label的操作线程 3是连接时或者断开时启动的线程.当点击连接, 启动了一个线程 然后连接服务器. (连接成功后), 我马上点断开连接按钮 又启动一个新的线程 执行断开连接操作.如此反复2次 窗体停止响应(卡住) 但是label的值仍然在变. (反复操作,是建立在操作线程执行完毕后的基础上.)
      

  5.   

    算了 哥教你招. Sock.BeginDisConn 在回调里面写 SOCKET.CLOSE()
      

  6.   


    就算你if else 也不行. 总会在Shutdown 或 Close的时候卡住.是或 不确定会在哪个上卡住. 
      

  7.   

    把所有的Shutdown 和Close都注释掉 然后写 s = null;结果 反复2遍以后 窗体依然停止响应了.