用socket连接远程服务器时,有时候会发生远程服务器断开连接,改如何判断?
我用C# TcpClient,有时候server已经关闭,但是TcpClient.connected还是true(比如server的80端口),用什么方法判断比较好?

解决方案 »

  1.   

    写个try  catch来捕捉吧
      

  2.   

    直接用Socket类吧,这个比较好控制!!
    Socket对象在对方断开连接的时候Receive方法会返回一个0字节的数据包。这样就可以判断对方是否断开连接了。
      

  3.   

    sock.Listen(50);
    listenshow.Text="主机"+myIP+"端口:8545开始监听......\r\n";
    while(true)
    {



    temp = sock.Accept(); 
    if(temp.Connected == true)
    {
    listenshow.Text = "与客户建立连接!";
            this.send1.Enabled = true;

    while(bb)
    {
    int byteRecv = 0;
    try
    {
    Byte[]  bbb=new Byte[64];
    byteRecv = temp.Receive(bbb,bbb.Length,0);
    if(byteRecv < 1)
    {
    temp.Close();
    temp = null;
    listenshow.Text = "与客户断开连接!从新监听!";
    this.send1.Enabled = false;
                                            this.showimage.Text = "";
    break;
    }
    string ccc=System.Text.Encoding.BigEndianUnicode.GetString(bbb);

    showimage.AppendText(ccc+"\r\n");   
    } catch(SocketException ex)
    {
        MessageBox.Show(ex.ToString());
    temp.Close();
                                        listenshow.Text = "与客户断开连接。";
    this.send1.Enabled = false;
    this.showimage.Text = "";
    break;
    } catch(ObjectDisposedException ex)
                                    {
                                        MessageBox.Show(ex.ToString());
                                        break;
                                    } } }wzd24(牧野)(衣带渐宽终不悔,为伊消得人憔悴) 兄弟帮忙解决的...
    那出来让兄弟参考..
      

  4.   

    昨天刚刚把我所有的家当都散了.
    这个:http://community.csdn.net/Expert/topic/5524/5524609.xml?temp=.4617731
      

  5.   

    http://blog.csdn.net/nstorm/archive/2004/12/27/231192.aspx同步和异步连接拔掉网线可能检测不到。
      

  6.   

    LS的,你Blog上的写的方法并不能检测基础网络异常。
      

  7.   

    http://www.cnblogs.com/liuzhiwei/archive/2007/04/24/725348.html
      

  8.   

    我用C#提供的封装,MSDN上提供的方案没有一种能够成功,用netstat查看连接已经断开的情况下,socket返回的还是true。貌似是无法在这一层上实现了。
      

  9.   

    我的Blog上有一篇文章就是讲这个的,你可以去看看!
    http://blog.csdn.net/wzd24