我是作为client的,但是我只在发送前判断了socket.Connected,如果为false则再socket.connect()但就在connect()时出错。
或者是我判断socket连接中断的方法不对!
请指教!

解决方案 »

  1.   

    要等ACK TIMEOUT过了之后,才能再连接
      

  2.   

    如何判断Timeout是否过了呢?另ACK是什么?
      

  3.   

    可能是主机发送的消息,接受端没有相应的receive
      

  4.   

    这个问题我碰到过,是socket服务端已经断开了与你刚才建立的连接.所以你在客户端再建立连接(用原来的环境)没用了,必须和服务端协议重新建立连接,或者通过周密的逻辑判断来修正你的代码.这个问题应该不难解决.
      

  5.   

    :helysan(真水无香)
    你说的对,但是我如何在“发送前”来判断服务端是否断开了我的连接呢?
      

  6.   

    自己解决了:  (哪位还有更好的办法,请指教)
    // 单独开启读取,以阻塞式读取判断服务端是否断开。
    socketUC.Receive(bufRes, 16, SocketFlags.None);
    // 如果接收了,但没有收到数据
    if (bufRes[0] == 0)
    {//锁一下,避免其它线程操作
        lock (socketUC)
       {    // 关闭这个连接
           socketUC.Shutdown(SocketShutdown.Both);
           socketUC.Close();
           // 再建一个新的连接
           socketUC = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
          // 设置发送超时 socketUC.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 1000);
         // 用新的实例连接
           socketUC.Connect(epUC);
        }
    }