socket如何检测已断线 有看到说用心跳包来做,这要怎么做呢?请大家给点意见,或者思路.还有server端移到无信号的位置,也要很快就能检测到断线,不然数据会丢失. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是每隔一段时间发一个包出去,对方回复,如果无回复断线你也可以直接用socket的keepalive属性,它都帮你封装好了 1. TCP协议在协议当中已经处理了丢包重发,在应用层可以认为是可靠的。2. 之所以需要心跳包,是因为在异常断开的情况下系统检查出断线状态所需要的时间相当长,最长达4分钟,这对于应用程序是无法容忍的,所以就通过自定义心跳包的机制来实际断线检测,也正因为连接的异常检测需要相当长的时间,为了防止设置不当的心跳间隔,而最好增加一定复杂度的判断逻辑。 ////这样判断超时int Send(const char* pch, const int nSize, const int nSecs){FD_SET fd = {1, m_hSocket};TIMEVAL tv = {nSecs, 0};if(select(0, NULL, &fd, NULL, &tv) == 0){//timeout}int nBytesSent = 0;if((nBytesSent = send(m_hSocket, pch, nSize, 0)) == SOCKET_ERROR) {//error}return nBytesSent;}超时时间自己设 还可以发送三次探测数据包 等待回应 一定时间内没有回应则认为掉线唯一, 我不确定的就是超时时间了,网络复杂啊 拙见:1.可用楼2的select模型,直接在select(...)函数中设置超时时间;2.也可用WSAAsynSelect/WSAEventSelect + WSAWaitForMultipleEvents模型,在WSAWaitForMultipleEvents(...)中设置超时值;3.还可用Overlapped I/O事件通知模型,在WSAWaitForMultipleEvents(...)中设置超时值。因为你即要在客户端判断是否断线了,又要在服务端判断,这两种环境是有区别的,尤其在连接数目上。以上模型各有优缺点,根据不同的环境选择合适的方案吧。 可以检测Socket号是否还存在,每个连接都有一个Socket号的 为什么mfc的CString类型可以转换为LPCTSTR ? 如何接收局域网内未知ip的数据 全方位的群招人 索性一次性多问点:总结一下OnDraw()函数何时被调用?(求全给分) 关于虚拟按钮,我发送了一个按下回车键,自己机子收到对的,为什么到别的机子上收到的是往下的键 一个对话框的问题! 添加一个模板类 请问,哪有军棋(就是陆战棋)算法实现的源代码? 怎么学习网络通讯 微软有没有软件测试的工具?叫什么名字???? 如何在按钮上贴图 如何保存局部的WCHAR *指针
你也可以直接用socket的keepalive属性,它都帮你封装好了
2. 之所以需要心跳包,是因为在异常断开的情况下系统检查出断线状态所需要的时间相当长,最长达4分钟,这对于应用程序是无法容忍的,所以就通过自定义心跳包的机制来实际断线检测,也正因为连接的异常检测需要相当长的时间,为了防止设置不当的心跳间隔,而最好增加一定复杂度的判断逻辑。 ////这样判断超时
int Send(const char* pch, const int nSize, const int nSecs)
{
FD_SET fd = {1, m_hSocket};
TIMEVAL tv = {nSecs, 0};
if(select(0, NULL, &fd, NULL, &tv) == 0)
{
//timeout
}
int nBytesSent = 0;
if((nBytesSent = send(m_hSocket, pch, nSize, 0)) == SOCKET_ERROR) {
//error
}
return nBytesSent;
}超时时间自己设 还可以发送三次探测数据包 等待回应 一定时间内没有回应则认为掉线唯一, 我不确定的就是超时时间了,网络复杂啊
1.可用楼2的select模型,直接在select(...)函数中设置超时时间;
2.也可用WSAAsynSelect/WSAEventSelect + WSAWaitForMultipleEvents模型,在WSAWaitForMultipleEvents(...)中设置超时值;
3.还可用Overlapped I/O事件通知模型,在WSAWaitForMultipleEvents(...)中设置超时值。
因为你即要在客户端判断是否断线了,又要在服务端判断,这两种环境是有区别的,尤其在连接数目上。以上模型各有优缺点,根据不同的环境选择合适的方案吧。