欢迎来到天天文库
浏览记录
ID:29473994
大小:205.54 KB
页数:16页
时间:2018-12-20
《操作系统课程设计winsock+api编程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、操作系统课程设计学习WinsockAPI编程操作系统课程设计学习WinsockAPI编程班级:信计0501姓名:李宁学号:305010400?姓名:宋若军学号:305010402515-15操作系统课程设计学习WinsockAPI编程学习WinsockAPI编程WindpowsSockets是广泛应用的、开放的、支持多种协议的网络编程接口,主要由winsock.h头文件和动态链接库winsock.dll组成。一、套接字套接字(Sockes)是通信的基础,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作是不
2、同主机之间的进程进行双向通信的端点。根据通信网络的特性,套接字可以分为以下两类。1、流套接字流套接字提供没有边界的数据流(即字节流),能够确保数据流以正确的顺序无重复地被送达,使用于处理大量数据。流套接字是面向连接的。2、数据报套接字数据报套接字支持双向数据流,此数据流不能保证按顺序和不重复送达,也不能保证数据传输的可靠性。数据报套接字是无连接的。Winsock对有可能阻塞的函数提供了两种处理方式:阻塞方式和非阻塞方式。在阻塞方式下,收发数据的函数在被调用后一直等到传送完毕或出错才能返回,期间不能进行任何操作。在非阻塞方
3、式下,函数被调用后立即返回,当网络传送完后,由Winsock给应用程序发送一个消息,通知操作完成。在编程时,应尽量使用非阻塞模式。二、Winsock的启动和终止由于Winsock服务是以动态链接库的形式实现的,所以在使用前必须调用WSAStartup函数对其进行初始化,协商Winsock的版本支持,并分配必要的资源。WSAStartup函数声明如下:intWSAStartup(WORDwVersionRequested,LPWSADATAIpWSAData);参数说明:◇wVersionRequested:指定加载的Wi
4、nsock版本,通常高位字节指定Winsock的副版本,低位字节指定Winsock的主版本,然后用MAKEWORD(X,Y)宏获取该值。◇IpWSAData:WSADATA数据结构指针,其中WSADATA结构的定义如下:TypedefstructWSAData{WORDwVersion;//期望使用的Winsock版本WORDwHighVersion;//返回现有Winsock最高版本charszDescription[WSADESCRIPTION_LEN+1];//套接字实现描述、charszSystemStatus[
5、WSASYS_STATUS_LEN+1];//状态或配置信息unsignedshortiMaxSockets;//最大套接字数15-15操作系统课程设计学习WinsockAPI编程unsignedshortiMaxUdpDg;//最大数据报长度charFAR*IpVendorInfo;//保留}WSADATA,FAR*LPWSADATA;在应用程序关闭套接字连接后,还需要调用WSACleanup函数终止对Winsock库的使用,并释放资源,函数声明如下:intWSACleanup(void);一、Winsock编程模型不
6、论是流套接字还是数据报套接字编程,一般都采用客户端/服务器模式,其运行原理基本类似。数据报套接字的编程模型如图一所示。流套接字的编程模型如图二所示。服务器socket()bind()closesocket()recvfrom()sendto()socket()客户端closesocket()recvfrom()sendto()服务器socket()bind()listen()accept()send()recv()closesocket()socket()connect()closesocket()send()recv(
7、)客户端图一数据报套接字编程模型图二流套接字编程模型流套接字的服务进程和客户端进程在通信前必须创建各自的套接字并建立连接,然后才能实现数据传输。具体编程步骤如下:(1)服务器进程创建套接字。(2)将本地地址绑定到套接字上以标识该套接字。(3)将套接字置入监听模式并准备接收连接请求。(4)客户端进程调用socket函数创建客户端套接字。(5)客户端进程向服务进程发出连接请求。(6)数据传输。(7)关闭套接字。15-15操作系统课程设计学习WinsockAPI编程服务器进程总是先于客户进程启动,调用socket创建一个流套接
8、字,该函数声明如下:SOCKETsocket(intaf,inttype,intprotocol);参数说明:◇af:指定网络地址族,一般为AF_INET。◇type:指定套接字类型,可选的取值如下:△SOCK_STREAM流套接字。△SOCK_DGRAM数据报套接字。◇protocol:指定网络协议,一般为0,表示
此文档下载收益归作者所有