社区
C语言
帖子详情
windows socket TCP 客户端 如何设置非阻塞?
找点资料真费劲
2014-10-18 09:28:56
在 客户端 阻塞模式 能通 的情况下,我再 在创建客户端套接字后加了这两句想改成非阻塞
int iMode = 1;
ioctlsocket(m_Client,FIONBIO,(u_long FAR*) &iMode);
connect函数返回的总是-1。不知为何?
服务端这样设置却是可用的。。。
还有一个问题是 如何清空socket 发送接收 缓冲区?
望指点。。。。
...全文
1016
5
打赏
收藏
windows socket TCP 客户端 如何设置非阻塞?
在 客户端 阻塞模式 能通 的情况下,我再 在创建客户端套接字后加了这两句想改成非阻塞 int iMode = 1; ioctlsocket(m_Client,FIONBIO,(u_long FAR*) &iMode); connect函数返回的总是-1。不知为何? 服务端这样设置却是可用的。。。 还有一个问题是 如何清空socket 发送接收 缓冲区? 望指点。。。。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq_22134911
2014-10-18
打赏
举报
回复
非阻塞connect返回-1且errno==EINPROGRESS代表连接正在异步建立,你需要观察write事件的发生并getsockopt检查error。
找点资料真费劲
2014-10-18
打赏
举报
回复
问题源码在此(求找错) #include <stdlib.h> #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") #define SERVER_PORT 2012 void main() { WORD wVersionRequested; WSADATA wsaData; int ret; SOCKET sClient; struct sockaddr_in saServer; BOOL fSuccess = TRUE; //WinSock初始化 wVersionRequested = MAKEWORD(2, 2); ret = WSAStartup(wVersionRequested, &wsaData); if(ret!=0) { printf("WSAStartup() failed!\n"); return; } if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2) { WSACleanup(); printf("Invalid WinSock version!\n"); return ; } sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sClient == INVALID_SOCKET) { WSACleanup(); printf("socket() failed!\n"); return ; } //去掉这两句便是可以以阻塞方式连通的客户端代码!!!!(加上这两句设置非阻塞就不行) int iMode = 1; int iasd=ioctlsocket(sClient,FIONBIO,(u_long FAR*) &iMode); saServer.sin_family = AF_INET; saServer.sin_port = htons(SERVER_PORT); saServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); int nn=SOCKET_ERROR; //连接服务器 while(1) { nn = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer)); int i=GetLastError(); printf("客户端未连接上!%d\n",i); Sleep(1000); while(nn==0) { printf("客户端已连接!\n"); Sleep(1000); } } closesocket(sClient); WSACleanup(); return ; }
找点资料真费劲
2014-10-18
打赏
举报
回复
服务端accept返回>0的值, 我客户端用的是GetLastError() 回复的是10056,connect()返回却是-1
女神打Boss
2014-10-18
打赏
举报
回复
没有见过非阻塞的方式,理解中阻塞是因为发送和接收函数,服务器端的监听函数造成的阻塞 具体的方式我忘记了,好像也要判定是否接收到吧 关注
mujiok2003
2014-10-18
打赏
举报
回复
int WSAGetLastError(void);
得到出错的原因。
MFC
TCP
多
客户端
通信(基于CAsync
Socket
)
一个简单且简陋的小测试程序,支持服务器对某
客户端
,服务器对所有
客户端
,
客户端
之间的通信。
TCP
Socket
基于CAsync
Socket
的
非阻塞
异步通信。效果图详见:http://blog.chinaunix.net/uid-28394603-id-5163195.html
Java实现
Socket
长连接和短连接
在Java编程中,
Socket
是网络通信的基础,它允许两个应用程序通过
TCP
/IP协议进行数据传输。
Socket
连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short ...
Windows
tcp
客户端
程序
设置
非阻塞
Windows
tcp
client
非阻塞
//
tcp
clienttest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" //
TCP
client //client send string to server //Visual C++ 6.0 #include #...
socket
tcp
服务端和
客户端
阻塞区别
非阻塞
模式:适用于多线程或多连接场景,特别是结合多路复用技术(如select()poll()epoll()等)时,可以高效地处理多个连接的 I/O 操作。
非阻塞
模式下的线程不会因为等待 I/O 而被阻塞,因此可以处理更多的并发连接...
C/C++网络编程在
windows
将
socket
设置
为
非阻塞
在
socket
编程中,对于
socket
的读写默认都是阻塞的,但有的情况我们需要将其
设置
为
非阻塞
,比如做多路复用,或者通过select实现连接超时等功能,将
socket
设置
为
非阻塞
,在
windows
和linux中的接口有所不同,在
windows
...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章