socket断线如何重连

如题所述

当Socket.Conneted == false时,调用如下函数进行判断:

///
/// å½“socket.connected为false时,进一步确定下当前连接状态
/// 
/// 
private bool IsSocketConnected()
{
    #region remarks
    /********************************************************************************************
     * å½“Socket.Conneted为false时, å¦‚果您需要确定连接的当前状态,请进行非阻塞、零字节的 Send è°ƒç”¨ã€‚
     * å¦‚果该调用成功返回或引发 WAEWOULDBLOCK é”™è¯¯ä»£ç  (10035),则该套接字仍然处于连接状态; 
     * å¦åˆ™ï¼Œè¯¥å¥—接字不再处于连接状态。
     * Depending on 
    ********************************************************************************************/
    #endregion
#region è¿‡ç¨‹
            // This is how you can determine whether a socket is still connected.
            bool connectState = true;
            bool blockingState = socket.Blocking;
            try
            {
                byte[] tmp = new byte[1];
socket.Blocking = false;
                socket.Send(tmp, 0, 0);
                //Console.WriteLine("Connected!");
                connectState = true; //若Send错误会跳去执行catch体,而不会执行其try体里其之后的代码
            }
            catch (SocketException e)
            {
                // 10035 == WSAEWOULDBLOCK
                if (e.NativeErrorCode.Equals(10035))
                {
                    //Console.WriteLine("Still Connected, but the Send would block");
                    connectState = true;
                }
else
                {
                    //Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
                    connectState = false;
                }
            }
            finally
            {
                socket.Blocking = blockingState;
            }
//Console.WriteLine("Connected: {0}", client.Connected);
            return connectState;
            #endregion
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-08-02
所谓断线 一般是基于TCP的长连接的 保持长连接的方式用心跳包来维持
如果发生掉线
你可以通过以多线程的方式 来实现 一个线程用于心跳包的发送 位置长连接 一个用于检测连接是否中断 如果发生中断 你就通过捕获到中断的事件来重新调用连接函数即可本回答被提问者和网友采纳
第2个回答  2014-02-21
再发一遍connect请求
相似回答