『壹』 socket通讯。要求断线后自动重连。我怎么写也没搞定。求高手
public class MySocket
{
Socket m_socket = null;
public string server_ip;
public int server_port;
public Socket createClientSocket()
{
//在这里利用上面的IP和PORT建立到服务器的连接。
//成功返回对应的Socket
//失败则返回null;
return;
}
public bool connect()
{
//在这里调用上面的连接方法
m_socket = null;
m_socket = createClientSocket();
if (m_socket == null)
{
return false;
}
return true;
}
public bool reconnect()
{
//还和上面一样调那个方法
}
///专门用来发送数据的方法
public int sendData()
{
//在这里,发送数据前就要调用下面的函数检查Socket的状态
bool ret = true;
bool isConnected = false;
bool isRead = false;
bool isWrite = false;
bool isError = false;
int avalSize = 0;
ret = checkSocket(ref isConnected, ref isRead, ref isWrite, ref isError, ref avalSize);
if (ret = false || isConnected == false || isError == true || (isRead == true && avalSize == 0))
{
//这里就调用那个重联的
reconnect();
}
//完毕后再检查一遍,看这次连上了没
ret = checkSocket(ref isConnected, ref isRead, ref isWrite, ref isError, ref avalSize);
if (ret = false || isConnected == false || isError == true || (isRead == true && avalSize == 0))
{
//仍没有连上的话就要交由业务部分去判断怎么办了。最好是把要发送的数据放进一个队列里
//然后在业务部分建一线程去取,再调用MySocket来发。发失败就再放回队列中,有一定的时间
// 间隔就行了。如次一来就实现了重连,并且数据不丢失。
}
}
///再有一个检查Socket状态的方法
public bool checkSocket(ref bool isConnected, ref bool isRead, ref bool isWrite, ref bool isError, ref int avalSize)
{
bool ret = true;
try
{
isConnected = m_socket.Connected;
isRead = m_socket.Poll(50, SelectMode.SelectRead);
avalSize = m_socket.Available;
isWrite = m_socket.Poll(50, SelectMode.SelectWrite);
isError = m_socket.Poll(50, SelectMode.SelectError);
}
catch (Exception e)
{
ret = false; e.ToString();
}
return ret;
}
}
『贰』 如何使一坊socket断开重连
Close只是通知底层socket关闭而已,并不一定保证底层的链接一定释放了,所以你一下子创建那么多链接肯定出问题 备注 Close 方法可关闭远程主机连接,并释放所有与 Socket 关联的托管资源和非托管资源。关闭后,Connected 属性将设置为 false。 ...
『叁』 C# socket 通信系统,socket断线重连问题
Socket连接不在通讯状态的时候监测是否连接良好就没有什么意义了,也就是说在传输数据的时可能连接会异常断开,这时候测试连接的线程肯定不可能在运行中(监测线程的优先级不可能比传输数据线程的优先级高),除非把优先级设得比较高,如果这样的话就太浪费资源了。
需要在Socket连接不在使用中时仍然保持连接,比较折衷的办法是:
其一,建立一个低优先级的监视线程,用来保持非通讯状态的连接完好。
其二,用try...catch...来维持通讯过程中的连接良好(一旦通讯异常立即重新连接)。
『肆』 Websocket断线重连怎么实现的
把连接的函数返回值取出来,然后做判断循环,如果超过3次就退出,或者进入下一个请求。
『伍』 怎样判断socket断开并自动重连
1. 根据ERRNO和recv结果进行判断
在UNIX/LINUX下,非阻塞模式SOCKET可以采用recv+MSG_PEEK的方式进行判断,其中MSG_PEEK保证了仅仅进行状态判断,而不影响数据接收
对于主动关闭的SOCKET, recv返回-1,而且errno被置为9(#define EBADF 9 /* Bad file number */)或104 (#define ECONNRESET 104 /* Connection reset by peer */)
对于被动关闭的SOCKET,recv返回0,而且errno被置为11(#define EWOULDBLOCK EAGAIN /* Operation would block */)
对正常的SOCKET, 如果有接收数据,则返回>0, 否则返回-1,而且errno被置为11(#define EWOULDBLOCK EAGAIN /* Operation would block */)
因此对于简单的状态判断(不过多考虑异常情况):
recv返回>0, 正常
『陆』 loadrunner socket 怎么实现断线重连
这个要跟开发的伙伴讨论下,比如你一个socket连接,客户端需要发送什么,服务器对应又返回什么,这些数据知道后才能做。
『柒』 python socket客户端怎么实现断线重连 求代码示范 谢谢
断线重连不是问题,问题是如何判断断线。
判断断线一般通过异常处理,当然也可以傻瓜式的只要有操作就重连。
下面是一个只要没有成功连接就重连的简单实现
importsocket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
whileTrue:
try:
s.connect(('127.0.0.1',80))
break
except:
print('retry...')
continue
print('connected.')
s.close()
『捌』 socket 客户端前面断线可以重连上,十几个小时后断线就重连不上了,这
首先断线有很多可能,服务器端代码错误或者网络路由问题,等等,解决这些断线问题的方法就是心跳检测,看应用需要采用几秒客户端(C)向服务器端发送【ping】协议(协议名称可以自己定)。然后服务器(S)要有个储存器(可以是哈希表或者是类数组)保存客户端连接句柄以及一些必要属性,还要有个时间,用来对比C每次ping的时间是否超过设定超时时间。如果超时就将C的Sock 句柄清除。到这S端就可以了。C端还要有个断线处理,监视检测自己是否断线,做个重连机制,这样一个完整的通讯就差不多了,至于其他应用就要看自己的需要通过协议来操作了。 希望这些能帮到你
『玖』 socket断线如何重连
所谓断线 一般是基于TCP的长连接的 保持长连接的方式用心跳包来维持
如果发生掉线
你可以通过以多线程的方式 来实现 一个线程用于心跳包的发送 位置长连接 一个用于检测连接是否中断 如果发生中断 你就通过捕获到中断的事件来重新调用连接函数即可
『拾』 socket 用disconnect 断开,再重新连接怎么搞
socket一旦断开,就无法再重新连接了(相关资源已被释放掉了)。只能重新创建新的socket去连接。