为Socket第三次发贴了
还是有一个疑问,C#写的Socket程序
客户端若直接关闭程序(不经过任何的关闭Socket操作)
服务器端会捕获一个错误,说异常关闭啥的
用Netstat 看一下端口连接情况,一切正常……
但客户端若用啥Close() Shutdonw(Both) BeginDisconnect() …… 等等,啥的
服务器端都会进入 Closing Close_Wait Time_Wait ……  等等状态!
难道C#的Socket就不能正常关闭么?
非得采用一端直接关闭程序这么极端?
有谁有好的方法或例程么? 学习一下了……

解决方案 »

  1.   

    自已顶一下
    顺便在说了一下,IE本身也会有很多的80端口连接处理Close_Wait状诚…………
      

  2.   

    貌似你的思维跟正常人相反...我们都认为“用啥Close() Shutdonw(Both) BeginDisconnect() …… 等等,啥的”才叫正常关闭...
      

  3.   

    楼上说是对的,但发现,无论怎么组合,服务器端都会有Closing,Close_Wait...等异常状态
    能给出一些示例代码,没有这些的么?
      

  4.   

    貌似你的思维跟正常人相反...我们都认为“用啥Close() Shutdonw(Both) BeginDisconnect() …… 等等,啥的”才叫正常关闭...
      

  5.   

    我现在的核心代码,请点评一下:
    我在所有通讯异常的地方,都调用了下面这段代码,貌似还可以!if (client != null)    //  client 为 客户端 TcpClient 实例
    {                
        if (client.Connected == true)
          client.Client.Shutdown(SocketShutdown.Both);
        if (networkStream != null) //  NetworkStream 实例,需手动关闭
          networkStream.Close();
         client.Close();
    }
    isConnectSucess = false;        //  标志连接已断开,下次使用是重新连接 Client
      

  6.   

    另外还有一点,想请教一下:
    当 networkStream.EndRead(ar)  即异步读取回调的时候
    若返回值为0,即读取了0个字节,是不是也可以认为连接中断或异常了,则抛出异常!
    期待有经验的一起讨论学习一下!
      

  7.   

    Csdn被太多无聊的问题占据了,真正需要帮助和讨论的问题,却被淹死了……