社区
网络编程
帖子详情
CAsyncSocket的超时设置,求教高手
xiaosun
2003-07-03 08:38:15
请问,在使用CAsyncSocket的时候,如果对方连接后在规定的时间(假定60秒)内没有发送内容过来,我希望关闭连接,但是如何才能实现(或者得到事件通知)。不希望使用timer。谢谢。
...全文
177
4
打赏
收藏
CAsyncSocket的超时设置,求教高手
请问,在使用CAsyncSocket的时候,如果对方连接后在规定的时间(假定60秒)内没有发送内容过来,我希望关闭连接,但是如何才能实现(或者得到事件通知)。不希望使用timer。谢谢。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaosun
2003-07-03
打赏
举报
回复
这个贴子我早就看过了,但是我说的是异步通信socket,你这个是同步的
zjp899
2003-07-03
打赏
举报
回复
使用select函数,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字调用过程中被锁定的应用程序,采取一种有序的方式,同时对多个套接字进行管理"(《Windows网络编程技术》原话)。使用方法与解释请见《Windows网络编程技术》。
在使用此函数前,需先将socket设置为非锁定模式,这样,在connect时,才会立马跳过,同时,通常也会产生一个WSAEWOULDBLOCK错误,这个错误没关系。再执行select则是真正的超时。
WSADATA wsd;
SOCKET cClient;
int ret;
struct sockaddr_in server;
hostent *host=NULL;
if(WSAStartup(MAKEWORD(2,0),&wsd)){return 0;}
cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(cClient==INVALID_SOCKET){return 0;}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
::closesocket (cClient);
return 0;
}
xiaosun
2003-07-03
打赏
举报
回复
你说的是socket的尝试建立连接时间吧setsockopt,但是我说的是连接以后的。
Richuen22
2003-07-03
打赏
举报
回复
好像CAsyncSocket或socket里面有个设置连接时间的函数或参数的,不过忘了在哪里。
用MFC
CA
sync
Socket
类实现计算机间的通信
本文主要介绍利用MFC
CA
sync
Socket
类实现计算机间通信的一种方法,并对
CA
sync
Socket
类做了扼要的介绍,并举例加以详细说明
CA
SYNC
SOCKET
有讲解文档 适合初学者 通过消息调用来验证函数调用过程
CA
sync
Socket
类的UDP通信
使用
CA
sync
Socket
可实现异步UDP 可在局域网内的不同PC上运行
CA
sync
Socket
类的应用实例
应用实例是一个简单的聊天室程序,采用C/S模型。
基于
CA
sync
Socket
的网络通信实例教程
基于
CA
sync
Socket
,原创的实例教程,有代码哦,累死我了,呵呵,欢迎交流!
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章