怎样在visual studio 2005 让客户端的recv函数不阻塞
2015-04-16 15:00
465 查看
1 客户端要达到的要求,大致如下 :
while(1)
{
if (有需要向服务器发送的request)
send()
else if(没有需要向服务器发送的request)
iResult = recv(mThreadSocket, buffer, 1, MSG_PEEK); //看一下是不是从服务器收到了什么
if ( iResult<= 0 )
continue; //回到while
}
2 : 如果在阻塞模式下 , 标红的那句会阻塞, 也就是说, 线程停在那里, 即使以后其他的线程新插入了一些需要发送的request,
因为本线程阻塞在这里, 也回不到while去。
3 解决方法 : 经google, 找到这篇文章
http://www.win32developer.com/tutorial/winsock/winsock_tutorial_3.shtm
仿照其的代码, 在connnect之后加上以下2句 :
即可使recv函数变为不阻塞模式 。
4 备注 : 有的文章说把这一句改为
iResult = recv(mThreadSocket, buffer, 1, MSG_PEEK|MSG_DONTWAIT);
也可以,在visual studio 2005下测试, 发现是不可以的, 因为并无MSG_DONTWAIT这个标志,可能为linux独有。
while(1)
{
if (有需要向服务器发送的request)
send()
else if(没有需要向服务器发送的request)
iResult = recv(mThreadSocket, buffer, 1, MSG_PEEK); //看一下是不是从服务器收到了什么
if ( iResult<= 0 )
continue; //回到while
}
2 : 如果在阻塞模式下 , 标红的那句会阻塞, 也就是说, 线程停在那里, 即使以后其他的线程新插入了一些需要发送的request,
因为本线程阻塞在这里, 也回不到while去。
3 解决方法 : 经google, 找到这篇文章
http://www.win32developer.com/tutorial/winsock/winsock_tutorial_3.shtm
仿照其的代码, 在connnect之后加上以下2句 :
//Try connecting... if (connect(mThreadSocket, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR) { LogTrace( TBCAF_TRACE_LEVEL_ERROR, FWARNING"Winsock started fail." ); return ; //Couldn't connect } //set non-block model u_long iMode=1; ioctlsocket(mThreadSocket,FIONBIO,&iMode);
即可使recv函数变为不阻塞模式 。
4 备注 : 有的文章说把这一句改为
iResult = recv(mThreadSocket, buffer, 1, MSG_PEEK|MSG_DONTWAIT);
也可以,在visual studio 2005下测试, 发现是不可以的, 因为并无MSG_DONTWAIT这个标志,可能为linux独有。
相关文章推荐
- 怎样在阻塞模式下设置recv()函数的阻塞时间
- Visual Studio 2005-如何添加 需要重载 的虚函数
- 阻塞与非阻塞(recv send read write 等函数介绍)
- socket中send和recv函数的阻塞理解
- Socket send函数和recv函数详解以及利用select()函数来进行指定时间的阻塞【转】
- socket中send和recv函数的阻塞理解
- Linux下客户端主动Close,服务端阻塞的read函数不会马上返回
- Visual Studio 2005入门 之 函数兼本章总结 [视频]
- VisualStudio.NET 或 Visual Studio 2005 客户端应用程序无法捕获 Office Spreadsheet 11.0 ActiveX 控件通过引发事件
- visual studio 2005 / visual studio 2008 添加函数或变量时当前页面的脚本发生错误
- perl中调用recv函数阻塞,设置超时
- Visual Studio 2005 以上成员函数向导的修改!
- Socket send函数和recv函数详解以及利用select()函数来进行指定时间的阻塞【转】
- 用OpenGL在 visual studio 2005 下画简单的二维函数图像
- 在visual studio 2005中引用自定义函数库
- 怎样解决安装sql sever 2008或visual studio 2010后安装sql sever 2005找不到本地服务器的问题
- perl中调用recv函数阻塞,设置超时
- Visual Studio 2005入门 之 函数兼本章总结 [视频]
- linux 套接字函数send和recv函数(阻塞模式)
- 在Visual Studio 2005中怎样删除已有网站。