SocketException的 ErrorCode来 看啊

解决方案 »

  1.   

    int lenth=stream.read()
    lenth ==0 客户端断开
    lenth ==-1 网络中断
      

  2.   

    1.server 读取 client 的中断标志 
    2.不知道 c# 里面有没有 timer 类,如果有可以用超时来捕捉
      

  3.   

    我能不能在Socket.Send之前获得client已经中断?
      

  4.   

    if(Sock.Available<=0&&Sock.Poll(500,SelectMode.SelectRead))
    {
                    Stream.Close();
    Sock.Shutdown(SocketShutdown.Both);
    Sock.Close();
    richTextBox1.AppendText("客户连接断开 时间:"+DateTime.Now.ToString()+"\n");
    }
    if(!Sock.Connected)
    {
    try
    {
    Point=new IPEndPoint(IP,1979);
    Sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    Sock.Connect(Point);
    Stream=new NetworkStream(Sock);
    richTextBox1.AppendText("客户重连成功 时间:"+DateTime.Now.ToString()+"\n");
    }
    catch{}
    }
      

  5.   

    if(Sock.Available<=0&&Sock.Poll(500,SelectMode.SelectRead))
    是否就可判断Sock已未连接?
      

  6.   

    你可以参考一下Remoting中的租约机制,当租约期为0时,标志到期。你可以选择是断开还是续约
      

  7.   

    我是想知道Socket通道是否还是通的?比如突然网线断的情况。
    不知道有什么科学的方法?
      

  8.   

    我也想知道有没有更好的办法
    我用的是Socket.Send时抛出SocketException的方法
      

  9.   

    我的办法:
    public bool isConnected(Socket s)
    {
    IPEndPoint rPoint=null;
    try
    {
    rPoint = s.RemoteEndPoint;
    }
    catch
    {
    return false;
    }
    return !rPoint == null }
      

  10.   

    rPoint = s.RemoteEndPoint;
    好使吗?RemoteEndPoint会实时与客户端联系一下再获得值?
      

  11.   

    客户端网线已断好久,
    rPoint = (IPEndPoint)s.RemoteEndPoint;
    没有throw任何错误啊。
    看样子我还是使用“心跳”测试法。
      

  12.   

    你的socket有没有用多线程来控制啊?若用单线程的话,才会出现你目前要解决的这个问题
    多线程的话,就按我上面说的方法,决不会有问题。我都多了N个这样的程序了。