社区
网络编程
帖子详情
非阻塞模式的TCP连接怎么实现呢?(100分)
jbz001
2011-09-12 09:45:41
非阻塞模式的TCP连接怎么实现呢?
我这已经实现了非阻塞模式的UDP连接,但是TCP连接不知道怎么做。
...全文
815
13
打赏
收藏
非阻塞模式的TCP连接怎么实现呢?(100分)
非阻塞模式的TCP连接怎么实现呢? 我这已经实现了非阻塞模式的UDP连接,但是TCP连接不知道怎么做。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sxcong
2011-09-14
打赏
举报
回复
打开MFC文件夹,看CAsyncSocket的源码
然后,再去codeproject上找找
CCliveHunter
2011-09-14
打赏
举报
回复
Select模型 或者 完成端口模型 王艳平的《网络与通信程序设计》一书中有详细的讲解
masterz
2011-09-14
打赏
举报
回复
file transfer over asynchronous TCP connection via boost.asio
successgl
2011-09-14
打赏
举报
回复
阻塞非阻塞指的是socket啊,与tcp,udp协议没啥关系啊,楼主的问题是不是没有这么简单啊?
blueapples0604
2011-09-14
打赏
举报
回复
利用SELECT监视端口数据就可以
fd_set fds;
timeval timeout={3,0}; //select等待3秒
FD_ZERO(&fds); //每次循环都要清空集合,否则不能检测描述符变化
FD_SET(m_CSocket,&fds); //添加描述符
int sel=select(m_CSocket+1,&fds,NULL,NULL,&timeout);
在等待的timeout时间内,若端口有数据,则select函数会返回,通过判断sel的值,就知道端口是否有数据,或者是超时了。
hurryboylqs
2011-09-13
打赏
举报
回复
UDP连接都会弄 TCP不会不是搞笑么
zhd320
2011-09-13
打赏
举报
回复
http://guojun0681.blog.163.com/blog/static/10051312010113113140952/
http://hi.baidu.com/%D1%EE%D4%C6%B7%C9%B5%C4%BF%D5%BC%E4/blog/item/eb5e8439daf9d9e5b211c7b1.html
或许有用
smwhotjay
2011-09-13
打赏
举报
回复
搞笑..
非阻塞tcp. 可以WSASynSelect 关注FD_CONNECT ,然后connect.等待FD_CONNECT事件就行了. WSAEventSelect一样的.
IOCP的acceptEx比较麻烦..
lijianli9
2011-09-13
打赏
举报
回复
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;
v_table
2011-09-13
打赏
举报
回复
异步模型好多,看实际情况用哪个。。
shenyi0106
2011-09-13
打赏
举报
回复
简单应用可以用CAsyncSocket
龙行天下之Sky
2011-09-13
打赏
举报
回复
int iMode = 0; //0表示阻塞,1表示非阻塞
ioctlsocket(m_socket,FIONBIO, (u_long FAR*) &iMode);
要自己设置的,函数就是ioctsocket
yynetsdk
2011-09-13
打赏
举报
回复
bsd socket or CSocket , CAnsySocket
Java
实现
Socket长
连接
和短
连接
Java
实现
Socket长
连接
和短
连接
,
实现
原理可参见个人博客
Java聊天室毕业设计完整版+数据库
一个Java的程序设计 聊天室毕业设计 完整代码+数据库
tcp
非阻塞
connect
实现
引言: 客户端connect接口, 代表着三次握手, 默认为阻塞
模式
, 在握手期间, 客户端程序只能处于等待状态, 不能处理其他的业务, 其次,如果握手失败, 还会等connect计时器时间, 大约是在75s左右。 一、阻塞connect存在的几大问题。 1、阻塞期间不能处理其他业务。 2、如果
连接
失败, 等待的时间过长。 二、
实现
非阻塞
connect的方法 1、将创建sockfd设置为阻塞
模式
int old_option = fcntl(fd, F_GETFL); int new_optio.
socket的阻塞
模式
和
非阻塞
模式
文章目录socket的阻塞
模式
和
非阻塞
模式
如何将socket设置为
非阻塞
模式
send和recv函数在阻塞和
非阻塞
模式
下的表现
非阻塞
模式
下send和recv函数的返回值总结阻塞与
非阻塞
socket的各自使用场景 socket的阻塞
模式
和
非阻塞
模式
如何将socket设置为
非阻塞
模式
无论是Windows还是Linux,默认创建的socket都是阻塞
模式
的。 在linux上,我们可以使用fcntl函数或者ioctl函数给创建的socket增加O_NONBLOCK标志来将socket设置为
非阻塞
模式
。 int o
Tcp
Listener 阻塞、
非阻塞
模式
TCP
同步与异步及阻塞
模式
,多线程+阻塞
模式
,
非阻塞
模式
简单介绍
分
类: Server 其它文章 技术理论2011-03-28 18:23 725人阅读 评论(1) 收藏 举报 首先我简单介绍一下同步
TCP
编程 与异步
TCP
编程。 在服务端我们通常用一个
Tcp
Listener来监听一个IP和端口。客户端来一个请求的
连接
,在服务端可以用同步的方式来接收,也可以用异步
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章