socket断线如何重连

 我来答
百度网友96ffcf7
推荐于2017-09-01 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118725
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部

当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
}
匿名用户
推荐于2016-08-02
展开全部
所谓断线 一般是基于TCP的长连接的 保持长连接的方式用心跳包来维持
如果发生掉线
你可以通过以多线程的方式 来实现 一个线程用于心跳包的发送 位置长连接 一个用于检测连接是否中断 如果发生中断 你就通过捕获到中断的事件来重新调用连接函数即可
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
stray_painter
2014-02-21 · 超过21用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:46.4万
展开全部
再发一遍connect请求
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式