2.2.2 Socket类型及规范 可以提供给用户使用的套接字有两种,它们分别是数据报套接字和流式套接字: 内容来自www.paper51.com 1)流式套接字(SOCKET_STREAM) paper51.com 提供了面向连接、双向可靠的数据流传输服务,数据无出错,无重复地发送且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。 copyright paper51.com 流式套接字使用传输控制协议(TCP)。它提供了一种可靠的,面向连接的数据传输方式。通常基于连接的流式套接字是设计客户机/服务器应用程序时的标准。流式套接字主要用于大批量数据或者让数据按顺序无重复的到达目的地而使用 http://www.paper51.com 2)数据报式套接字(SOCKET_DGRAM) 内容来自www.paper51.com
提供了无连接服务。数据包以独立形式被发送,不提供无错保证,数据可能丢失或者重复,并且接收顺序无序。数据报套接字使用用户数据报协议(UDP)。实际使用中,同一个分组数据报可能不止一次的被发送,一般要等到接收方发回确认收到的消息才会停止发送。 内容来自www.paper51.com 一般有两种套接字规范:一种是针对UNIX系统的Berkely Socket规范;一种是占主流地位的Windows sockets(简称WinSock)规范,它是Microsoft 以Berkely Socket规范为范例开发的windows下的网络编程接口。 copyright paper51.com Windows socket规范定义并记录了如何使用API与Internet协议相连接,且所有的Windows socket实现都支持流式套接字和数据报套接字。应用程序调用Windows socket的API实现相互之间的通信。Windows socket又利用下层的网络通信协议功能和操作系统调用实现实际的通信工作。 http://www.paper51.com 2.2.3 Win Socket API 内容来自论文无忧网 www.paper51.com 本文在软件实现上使用的Socket函数正是WindowsSocket API。下面介绍几个重要的API: 内容来自论文无忧网 www.paper51.com 一) WSAStartup函数 内容来自论文无忧网 www.paper51.com int WSAStartup( copyright paper51.com WORD wVersionRequested, http://www.paper51.com LPWSADATA lpWSAData copyright paper51.com ); http://www.paper51.com
使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。该函数执行成功后返回0。 内容来自www.paper51.com 例:假如一个程序要使用2.1版本的Socket,那么程序代码如下 内容来自论文无忧网 www.paper51.com wVersionRequested = MAKEWORD( 2, 1 ); 内容来自www.paper51.com
err = WSAStartup( wVersionRequested,&wsaData ); http://www.paper51.com 二) WSACleanup函数 paper51.com int WSACleanup (void); http://www.paper51.com
应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源。 内容来自论文无忧网 www.paper51.com
|