C++ socket编程基础三(Windows异步套接字)

异步套接字:如果使用阻塞的套接字的话,在控制台下还好!如果是WIN32程序的话,那么就容易造成界面的假死,因为接收函数一直等待有消息进来之后才会被返回!所以此时界面一直属于假死的状态,如果你乱动的话,那么就容易真死了。解决办法如下:第一:使用多线程技术,多线程和SOCKET结合的话,可以使用单独一个线程来接收消息。这样即使接收函数阻塞了也不会影响其他线程,例如界面线程。但是如果使用多线程的
摘要由CSDN通过智能技术生成
异步套接字:
如果使用阻塞的套接字的话,在控制台下还好!如果是WIN32程序的话,那么就容易造成界面的假死,因为接收函数一直等待有消息进来之后才会被返回!所以此时界面一直属于假死的状态,如果你乱动的话,那么就容易真死了。解决办法如下:
第一:使用多线程技术,多线程和SOCKET结合的话,可以使用单独一个线程来接收消息。这样即使接收函数阻塞了也不会影响其他线程,例如界面线程。但是如果使用多线程的话,就必须要考虑到多线程之间同步的问题,以及临界资源的问题。


第二:使用异步套接字。但是使用异步套接字的话,至少要了解一下Windows的消息机制。异步套接字的工作原理是基于Windows消息的,和在MFC中的其他消息函数一样,当有消息的时候,套接字的相关函数就被触发。例如,我们双击的时候,系统感知了这个消息,然后做出响应。异步套接字的工作也是如此,当有网络消息来的时候,接收函数才工作,否则接收函数是不工作的。


使用步骤如下:

WSADATA wsaData;
WORD wVersion = MAKEWORD(2,2);
//需要打开版本为2.2的socket
if ( WSAStartup(wVersion,&wsaData) != 0 )
{
//打开失败…
}
//判断版本是否为2.2
if ( LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值