Socket 客户端重连机制
try{ socket = new Socket(ip,port); . . .}catch{ socket = Socket(ip,port); . . .}
socket.connect连接不成功时候会抛出异常,try{}catch 捕获异常 继续调用连接函数,递归调用。 当然,如果很长时间都连接不上会占用很多堆栈。 给分吧少年

socket 用disconnect 断开,再重新连接怎么搞
如果你是客户端,那么可以调用connect进行连接。 如果你是服务器端,那么无法进行重连(只能等待客户端发来的连接请求)。

C++ socket客户端断线后如何重新连接
这个要分情况了。 如果是UDP的话,就不存在连接不连接的问题了。因为这个是面向无连接的,直接发送数据即可。如果是TCP的话,就需要连接了。你应该这么办:首先每隔一段时间查看是否与服务器断开了,或者根据你具体的要求来查看是否断开。第二重新连接。 你想问的事如何重新连接是把?你之前的连接就是发送了客户端是发送了connet函数连接把?如果发现断线了,就重新发送connect函数连接即可。
你说的检测断线你都会了,重连不会啊? 你在客户端开启个定时器或者线程,每隔一段时间判断下当前的连接状态(你自己说检测断线你会的,所以肯定有状态)。如果断线了,那就清理下SOCKET数据重新构造下(地址端口模式什么的) 然后连接被,如果想做次数限制 那就写个递归 比如第一次连接失败了就在调一次连接 中间Sleep 1-3秒, 反正客户端断网这样可能客户端回卡死一小会, 不想卡死就在开启个线程或者定时器的 来进行重新连接。 次数一般连三次连不上就Destroy吧 你也可以看看连接失败的原因 用GetLastError 看失败原因就行了。 具体怎么做查MSDN

C# socket 通信系统,socket断线重连问题
首先断线有很多可能,服务器端代码错误或者网络路由问题,等等,解决这些断线问题的方法就是心跳检测,看应用需要采用几秒客户端(C)向服务器端发送【ping】协议(协议名称可以自己定)。然后服务器(S)要有个储存器(可以是哈希表或者是类数组)保存客户端连接句柄以及一些必要属性,还要有个时间,用来对比C每次ping的时间是否超过设定超时时间。如果超时就将C的Sock 句柄清除。到这S端就可以了。C端还要有个断线处理,监视检测自己是否断线,做个重连机制,这样一个完整的通讯就差不多了,至于其他应用就要看自己的需要通过协议来操作了。希望这些能帮到你
Socket连接不在通讯状态的时候监测是否连接良好就没有什么意义了,也就是说在传输数据的时可能连接会异常断开,这时候测试连接的线程肯定不可能在运行中(监测线程的优先级不可能比传输数据线程的优先级高),除非把优先级设得比较高,如果这样的话就太浪费资源了。 需要在Socket连接不在使用中时仍然保持连接,比较折衷的办法是:其一,建立一个低优先级的监视线程,用来保持非通讯状态的连接完好。 其二,用try...catch...来维持通讯过程中的连接良好(一旦通讯异常立即重新连接)。

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}
所谓断线 一般是基于TCP的长连接的 保持长连接的方式用心跳包来维持 如果发生掉线 你可以通过以多线程的方式 来实现一个线程用于心跳包的发送 位置长连接 一个用于检测连接是否中断如果发生中断 你就通过捕获到中断的事件来重新调用连接函数即可
再发一遍connect请求

本文由 在线网速测试 整理编辑,转载请注明出处。