windows下,客户端如何创建一个长连接? 客户端需要随时向服务端发送数据,每次都要连接服务端感觉不太好,想创建一个长连接一直连着,每次只Send就行。该怎么创建长连接? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用tcp连着,十分钟发送一个心跳包啊 #3楼 得分:0回复于:2010-07-19 17:13:24用tcp连着,十分钟发送一个心跳包啊 具体怎么发心跳包啊,能举个例子吗 不关闭在随后在做select、send、recv等操作时,返回-1 你用的是非阻塞模式吗,用WSAGetLastError获取返回码,判断啊 难道我connect了一个普通的socket不是长连接吗? 用TCP啊,TCP不就是长连接?直接调用SOCKET 建立连接后不关闭socket,当连接出现异常或关闭时,自动去重新连接服务器,异常检测是通过客户端与服务器之间的心跳来实现的 谁说的 一般路由器会每隔一段时间去检测连接是否有效 ROS路由器对于连接成功的就会等待24小时 不关闭Socket ,过几分钟发一个心跳包就行了吧,不知道,试试 如果你连接socket成功建立好连接后,隔一段时间彼此不发送数据,估计会被路由器强制关闭的。必要的时候可以采用发送一点"心跳"数据。 对于发送保持连接的心跳包很简单,通常做法是发送一个空格字符,让TCP保持有效会话状态 要包含头文件#include <mstcpip.h> //KeepAlive实现 tcp_keepalive inKeepAlive = {0}; //输入参数 unsigned long ulInLen = sizeof(tcp_keepalive); tcp_keepalive outKeepAlive = {0}; //输出参数 unsigned long ulOutLen = sizeof(tcp_keepalive); unsigned long ulBytesReturn = 0; //设置socket的keep alive为5秒,并且发送次数为3次 inKeepAlive.onoff = 1; inKeepAlive.keepaliveinterval = 5000; //两次KeepAlive探测间的时间间隔 inKeepAlive.keepalivetime = 5000; //开始首次KeepAlive探测前的TCP空闭时间 if (WSAIoctl((unsigned int)Accept, SIO_KEEPALIVE_VALS, (LPVOID)&inKeepAlive, ulInLen, (LPVOID)&outKeepAlive, ulOutLen, &ulBytesReturn, NULL, NULL) == SOCKET_ERROR) { strError.Format(_T("WSAIoctl failed. error code %d"), GetLastError()); return 0; } 连接后不断开就是长连接,连接后做完了你想做的事然后断开就是短连接;长连接与短连接不是一个技术概念,不是什么connect("长连接")、connect("短连接"),而是你让他长着连就是长连接,你让他短着连就是短连接。 TCP/IP 你建立的连接就是长连接啊 只要你不把他关了 发心跳包 只是用来测试连接是否正常。可能对方断电了或者网线掉了的情况就需要 发心跳包,如果长时间对方没反应就说明 连接断了 VC6.0一个很懵懂的问题? 关于驱动派遣函数的线程上下文的问题? 关于从视频流中抓一张图片的问题 紧急求助:如何在程序执行过程中动态加载数据库中的表 实现稳定的服务器端之把接受和发送数据分别绑定不同的端口篇 急:如何通过市面上的一些USB Bridge Cable传输文件? 排序算法?? SendMessage如何设置check单选框位选中状态? 小声问一个最最初级的问题 如何把 读取的 HBITMAP 图片 写入到窗口上 CoInitializeSecurity 的小问题 最大连接数的问题,大家有什么好办法?
具体怎么发心跳包啊,能举个例子吗
connect了一个普通的socket
不是长连接吗?
必要的时候可以采用发送一点"心跳"数据。
对于发送保持连接的心跳包很简单,通常做法是发送一个空格字符,让TCP保持有效会话状态
tcp_keepalive inKeepAlive = {0}; //输入参数
unsigned long ulInLen = sizeof(tcp_keepalive);
tcp_keepalive outKeepAlive = {0}; //输出参数
unsigned long ulOutLen = sizeof(tcp_keepalive);
unsigned long ulBytesReturn = 0; //设置socket的keep alive为5秒,并且发送次数为3次
inKeepAlive.onoff = 1;
inKeepAlive.keepaliveinterval = 5000; //两次KeepAlive探测间的时间间隔
inKeepAlive.keepalivetime = 5000; //开始首次KeepAlive探测前的TCP空闭时间 if (WSAIoctl((unsigned int)Accept,
SIO_KEEPALIVE_VALS,
(LPVOID)&inKeepAlive, ulInLen,
(LPVOID)&outKeepAlive, ulOutLen,
&ulBytesReturn, NULL, NULL)
== SOCKET_ERROR)
{
strError.Format(_T("WSAIoctl failed. error code %d"), GetLastError());
return 0;
}
长连接与短连接不是一个技术概念,不是什么connect("长连接")、connect("短连接"),而是你让他长着连就是长连接,你让他短着连就是短连接。