socket 用disconnect 断开,再重新连接怎么搞
socket一旦断开,就无法再重新连接了(相关资源已被释放掉了)。只能重新创建新的socket去连接。
如果你是客户端,那么可以调用connect进行连接。 如果你是服务器端,那么无法进行重连(只能等待客户端发来的连接请求)。

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

socket 断开连接后重连
socket 关闭连接后,就不能用它重新连接了。要想重新连接,就得建立新的socket实例来进行连接。然后把全局引用指向新的socket就可以了。
定义一个全局变量 把第一次建立的socket 值保存下来;然后把这个socket值赋值给第二次建立连接socket2 就OK了;
那就把socket连接保存一下
Close只是通知底层socket关闭而已,并不一定保证底层的链接一定释放了,所以你一下子创建那么多链接肯定出问题 备注Close 方法可关闭远程主机连接,并释放所有与 Socket 关联的托管资源和非托管资源。关闭后,Connected 属性将设置为 false。对于面向连接的协议,建议先调用 Shutdown,然后再调用 Close 方法。这可以确保在已连接的套接字关闭之前,已发送和接收该套接字上的所有数据。如果需要在不首先调用 Shutdown 的情况下调用 Close,则可以将 DontLinger Socket 选项设置为 false,并指定一个非零的超时间隔,从而确保排队等待输出的数据得到发送。这样,Close 将会一直阻止到发送完该数据或指定的时限超时为止。如果将 DontLinger 设置为 false,并且指定了一个非零的超时间隔,Close 将会释放连接并自动放弃排队等待输出的数据。补充: 那就没办法了,你只能限制你的链接数量,可能你的底层的负荷量达不到那么大吧,不行你找其他的socket通信类库试试

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请求

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

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