Winsocket入门教程二:非阻塞式服务器和客户端程序.docx
《Winsocket入门教程二:非阻塞式服务器和客户端程序.docx》由会员分享,可在线阅读,更多相关《Winsocket入门教程二:非阻塞式服务器和客户端程序.docx(13页珍藏版)》请在第一文库网上搜索。
1、WinSOCket入门教程二:非阻塞式服务器和客户端程序那什么是非堵塞呢?非堵塞是相关于堵塞而言,堵塞指的是在进行一个操作的时 候,如服务器接收客户端的连接(accept),服务器或者者客户端读写数据(read、writ e),假如该操作没有执行完成(成功或者者失败都算是执行完成),则程序会一直堵塞在操 作执行的地方,直到该操作返回一个明确的结果。而非堵塞式程序则不一样,非堵塞式程 序会在产生堵塞操作的地方堵塞一定的时间(该时间能够由程序员自己设置)。假如操作没 有完成,在到达所设置的时间之后,不管该操作成功与否,都结束该操作而执行程序下面 的操作。为了执行非堵塞操作,我们在创建了一个套接口后
2、,需要将套接口设置为非堵塞的 套接口。为了将套接口设置成为非堵塞套接口,我们需要调用i。CtlSoCket函数将套接口 设置为非堵塞的套接口。ioctlsocket函数的定义如下:该函数的作用是操纵套接口的I/O模式。参数S表示要设置的套接口;参数Cmd表示要对该套接口设置的命令,为了要将 套接口设置成为非堵塞的,我们应该填写FIONBIO; argp表示填写命令的值,如我们 要将套接口设置成非堵塞的,我们需要将值设置成为L假如我们要将套接口设置成为非 堵塞状态的话,我们将值设置成为0就是了。为了进行非堵塞的操作,我们需要在进行操作之前调用select函数,select函数 的定义如下:该函数
3、设定一个或者多个套接口的状态,并进行必要的等待,以便执行异步I/O (非堵塞)操作。参数Fifds被忽略,该参数的作用仅仅是为了与伯克利套接口相兼容;参数readf ds表示要检测的可读套接口的集合(该参数可选,可为设置为NULL);参数readfds表示要检测的可写套接口的集合(该参数可选,可为设置为NU LL);参数exceptfds表示要检测的套接口的错误(该参数可选,可为设置为NULL);参 数timeout表示执行该函数时需要等待的时间,假如为NULL则表示堵塞操作,为。则 表示立即返回。下面让我们来看看参数类型fd_set, fd_set表示套接字的集合。在使用select函 数时
4、,我们需要将相应的套接字加入到相应的集合中。假如集合中的套接字有信号,sele Ct函数的返回值即为集合中有信号的套接字数量。我们用下面的几个宏来操作fd_set集合。我们能够使用FD_SET(sz *set)将套 接字s加入到集合set中;我们能够使用FD_CLR(sz *set)将套接字S移除出集合se t;我们能够使用FD_ZERO(*set)将集合Set清空;最后,我们能够使用FD-ISSET (s, *set)来推断套接字S是否在集合中有信号。接下来再让我们来看看select函数的三个集合参数readfds writefds与exceptf dSoreadfds表示可读套接字的集合,
5、可读套接字在三种情况下有信号出现:一、假如 集合中有套接字处于监听状态,同时该套接字上有来自客户端的连接请求;二、假如集合 中的套接字收到了 Serld操作发送过来的数据;三、假如集合中的套接字被关闭、重置或 者者中断。writefds表示可写套接字的集合,可写套接字在两种情况下有信号出现:一、集合 中的套接字通过connect操作后,连接成功;二、能够用send操作向集合中的套接字 写数据。exceptfds表示错误套接字的集合,错误套接字在两种情况下有信号出现:一、集 合中的套接字通过COrmeCt操作后,连接失败;二、有带外数据到来。在我们熟悉了创建服务器与客户端程序的基础知识后,我们再
6、来看看示例程序,以 加深我们对知识的懂得。程序的运行结果如下所示:下面是服务器程序的代码:12. typedef list:iterator SocketListIterator;13. static const int c_iPort = 10001;14. bool GraceClose(SOCKET *ps);15. int main()16. 17. int iRet = SOCKET_ERROR;18. /初始化 Winsocket9所有 Winsocket程序务必先使用 WSAStartuP进行初始化19. WSADATA data;20. ZeroMemory(8cdataz S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Winsocket 入门教程 阻塞 服务器 客户端 程序
