单位文秘网 2021-10-24 08:11:03 点击: 次
【摘 要】本文研究了一种非阻塞Winsock模型—WSAAsyncSelect模型。考虑到TCP/IP网络中服务器/客户端这种特定的通信模式以及套接字模型在通信时会出现阻塞现象,研究将该WSAAsyncSelect模型在TCP/IP网络通信中的应用。最后,针对该模型传输数据实时性强的优点,提出了其应用在网络通信中的可行性。
【关键词】WSAAsyncSelect;非阻塞;TCP/IP
0.引言
随着网络通信的迅速发展,各类应用软件的网络通信开发需求也日渐增长,这就使得对各类网络通信技术及其应用的研究也进一步深入。在网络通信时,必须遵循一定的通信协议,其中TCP/IP协议簇是应用最为广泛的一类,其具有能够跨平台移植网络应用程序的优势。应用程序一般通过应用程序编程接口来访问TCP/IP网络,本文研究的就是一种专门实现Windows应用程序数据通信的网络编程接口Winsock。
1.Winsock及其原理简述
Winsock是Windows Sockets的简称,它是Windows操作系统下的应用TCP/IP协议的应用系统编程接口标准(Windows API)。Windows的应用系统利用Winsock进行网络数据通信的简要过程为:首先,应用程序通知网络编程接口Winsock将要执行的命令,然后由Winsock将这些命令翻译成可以与TCP/IP协议进行通信的相应固定格式,最后就是通过TCP/IP将这些命令传输到网络中进行数据通信[1]。
2.基于非阻塞Winsock的TCP/IP网络通信
2.1 Winsock在TCP/IP网络通信的应用
基于TCP/IP的网络通信一般采用的是常用的客户机/服务器(C/S)模式。在该种模式下,客户机一般为主动方,也就是请求连接方;而服务器则为被动方,即等待并接受请求方。客户机应用程序通过发送请求给服务器程序,以得到发送或者接受数据的连接许可,从而进行相应的操作;服务器则对这些请求作出响应,以完成相应的操作[2][3]。
Winsock接口可以很好的满足客户机和服务器之间的这种通信需求。这里的Winsock相当于Windows平台下的套接字(Socket)。一个套接字就是通信的一端,为用户提供了一种收发数据的机制。它通常分为两种:流方式(Stream Socket)和数据报(Datagram Socket)[3]。其中流方式是一种可靠的、面向连接的的数据传输方式,其网络程序的通信流程是:首先创建并绑定套接字,然后服务器端对客户端进行监听,是否有连接请求,当客户端发出连接请求后,判断是否允许连接,允许则进行接下来的数据读写通信。若该连接无效,则继续等待。
2.2基于非阻塞Winsock的TCP/IP通信——WSAAsyncSelect模型
面向连接的网络通信的缺点是若客户端一直没有有效的连接请求,服务器程序始终保持在等待连接状态,网络就发生了阻塞,导致数据无法在正常时间到达目的地[2]。为了避免这种缺陷,Winsock提供了非阻塞模型——异步选择WSAAsyncSelect模型,这里的非阻塞就是异步模式。WSAAsyncSelect模型的应用主要依赖于Windows消息驱动机制,其核心就是WSAAsyncSelect( )函数。数据传输采用的方法是由该函数指定某种网络事件,如有数据到达、可以发送数据、有程序连接请求等,当被指定的网络事件发生时,由Winsock对程序发送由程序事先约定的消息。程序中就可以根据这些消息做相应的处理。其函数原型为:int WSAAsyncSelect(SOCKET s,HWND hWnd,unsigned int wMsg,long lEvent),其中,s参数是我们感兴趣的网络事件的套接字;hWnd是一个窗口句柄,它是网络事件发生后接收消息的窗口句柄;wMsg是指上面所标识的窗口收到的消息;lEvent是应用程序感兴趣的网络事件集合,可以为一种或者几种网络事件的组合。
当应用程序中调用该函数后,自动将套接字设置为非阻塞模式。即Windows应用程序在调用接收函数recv( )接收数据前,先调用WSAAsyncSelect( )函数注册网络事件。然后WSAAsyncSelect( )函数立即返回,线程继续。当系统中数据准备好时,再向应用程序发送消息。应用程序收到消息后,再调用recv( )接收数据完成通信,以此反复[4]。这样主线程不会一直处于等待状态,能够异步的监测是否有网络事件发生,并且待数据准备好后一并接收,避免了线程阻塞的问题,保障了数据传输的可靠性和实时性。特别注意的是,由于WSAAsyncSelect( )模型是基于消息的,那么应用该模型时就要创建相应的窗口对话框,然后将窗口句柄传回到WSAAsyncSelect()函数中的hWnd参数中。
2.3非阻塞Winsocket TCP/IP网络通信的应用
WSAAsyncSelect通信模型因为具有异步非阻塞的优点而得到了广泛的应用。对于实时性和传输可靠性要求较高的应用程序通信都用到了该类通信模型,其中就包括网络游戏。随着网络产品的迅速发展,网络游戏成为近年来热门的商业产品。网络游戏一般要求通信时数据能够实时的进行更新以实现游戏相应的操作,且一般其数据量较大,采用传统的通信模型很容易发生阻塞,造成数据不能及时的传递。此时,WSAAsyncSelect模型的优势就能发挥出来,游戏应用程序在通信时调用WSAAsyncSelect( )函数,通知系统感兴趣的网络事件,该函数立即返回,游戏应用程序继续运行,直到数据准备好后,再接收。这样既能避免等待数据的阻塞发生,又能可靠地传输数据。另外,由于网络游戏一般都要建立应用窗口,而WSAAsyncSelect模型的使用必须创建窗口。这样二者结合,该模型正好能够利用网络游戏创建的窗口,从而不必再额外创建,节省了内存空间。
3.结语
本文研究了一种基于WSAAsyncSelect非阻塞Winsock的TCP/IP网络通信模型,相比于其他Winsock模型,该模型具有很大的优势。进行通信时,会自动的将套接字设置为非阻塞模式,网络事件发生时先通知线程,若消息未准备好,线程无需等待,而是继续运行,直到消息准备好再接收,这样既不会发生阻塞。保证了数据传输的灵活性和实时性。该模型能够满足网络通信对数据通信的实时性、可靠性的要求。 [科]
【参考文献】
[1]Anthony J.,Jim O.,杨合庆译. Windows 网络编程(第二版)[M].北京:清华大学出版社,2002.
[2]王艳华.基于Winsock的TCP/IP网络通信[J].电讯技术,2000,5:76-80.
[3]周家骐.基于Winsock的网络应用程序设计[J].现场总线与网络技术,2007,12:64-66.
[4]杜永峰,刘钊.Windows平台下的网络异步通讯编程技术[J].电子科技,2012,25(3):59-61.
(责任编辑:单位文秘网) )地址:https://www.kgf8887.com/show-161-96684-1.html
上一篇:太平江一级水电站水情自动测报方案
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用