Windows Socket编程实验要求.ppt
《Windows Socket编程实验要求.ppt》由会员分享,可在线阅读,更多相关《Windows Socket编程实验要求.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Windows Socket编程实验要求Windows Sockets编程简介Windows Sockets简介简介基本概念基本概念数据结构数据结构WinSock WinSock 库函数库函数程序结构程序结构Windows Sockets简介Windows Sockets(套接字)是在Windows下一套开放的、支持多种协议的网络编程接口规范。为 Windows下网络异步通信提供了一种方便的开发和运行环境。Windows Sockets规范建立在 BSD UNIX 中实现的 Berkeley 套接字模型上,这个模型现在已是TCP/IP网络的标准。它独立于底层的协议。许多网络供应商在网络协议中支
2、持 Windows Sockets,包括TCP/IP、DECNet、IPX/SPX 等。目前主要是TCP/IP Windows Sockets DLL。原理示意图工作模式TCP/IP应用服务采用客户机/服务器工作模式,服务器端启动守护进程,等待客户端的请求;服务器对应客户端的请求,派生子进程与客户进程进行数据通信,提供服务。客户机/服务器工作模式服务器先启动:1)打开一通道,告之本地主机愿意在某一公认的地址(端口,如FTP为21)接收客户请求。2)等待客户请求到达该端口。3)接收客户请求,处理请求。4)转2),等待另一客户请求。客户方:1)打开一通道,并连接到服务器的端口上。2)向服务器发服务
3、请求报文,等待应答;继续请求3)请求结束,关闭通道。基本概念套接字(Socket):网络通信的基本构件,它是可以被命名和寻址的通信端点,每一个套接字与一个进程相连。TCP/IP应用程序之间的通信通过Socket进行。服务器拥有全局公认的Socket,任何客户端都可以向它发出连接请求和信息请求。客户端向操作系统申请一个Socket,系统为之分配一个Socket号。套接字类型 流式套接字流式套接字 SOCK_STREAMSOCK_STREAM 面向连接,可靠,数据无错,无重复的发送,且按面向连接,可靠,数据无错,无重复的发送,且按发送顺序接收的服务。发送顺序接收的服务。数据报式套接字数据报式套接字
4、 SOCK_DGRAMSOCK_DGRAM 无连接服务。数据包以独立方式发送,数据可能有无连接服务。数据包以独立方式发送,数据可能有错、有重复、有丢失,接收顺序混乱。错、有重复、有丢失,接收顺序混乱。在 WinSock 1.1#define SOCK_STREAM 1 /*stream socket*/#define SOCK_DGRAM 2 /*datagram socket*/端口端口传输层和网络层在功能上的最大区别是传输层传输层和网络层在功能上的最大区别是传输层提供了进程通信能力。网络通信的最终地址不提供了进程通信能力。网络通信的最终地址不仅仅是主机地址,还包括可以描述进程的某种仅仅是主
5、机地址,还包括可以描述进程的某种标识符;标识符;端口是一种抽象的软件结构(包括一些数据结端口是一种抽象的软件结构(包括一些数据结构和构和 I/O I/O 缓冲区)。缓冲区)。每个端口都有一个端口号,每个端口都有一个端口号,TCP/IPTCP/IP的的 TCP TCP 和和 UDP UDP 的端口号互相独立。小于的端口号互相独立。小于255 255 的端口号作的端口号作为保留端口。为保留端口。相关五元组半相关(三元组)半相关(三元组)(协议、本地地址、本地端口号协议、本地地址、本地端口号)它在网络中可以全局唯一地标志一个进它在网络中可以全局唯一地标志一个进程,它指定了连接的每半部分。程,它指定了
6、连接的每半部分。全相关全相关(相关五元组相关五元组)(协议、本地地址、本地端口号、远程协议、本地地址、本地端口号、远程地址、远程端口号地址、远程端口号)创建一个套接字通过套接字与远程应用建立连接阻塞阻塞(blocking)两种模式:两种模式:阻塞模式阻塞模式(blocking mode)非阻塞模式非阻塞模式(non-blocking mode)。阻塞模式阻塞模式(或称同步模式或称同步模式 Synchronous)的的socket的函数直的函数直到操作完成才返回。调用返回之前,该到操作完成才返回。调用返回之前,该 socket 不能做任不能做任何其它事情。在何其它事情。在Berkeley Soc
7、kets 中,套接字的默认工中,套接字的默认工作模式是阻塞模式作模式是阻塞模式非阻塞模式非阻塞模式(异步操作异步操作 operating asynchronously),则调则调用立即返回。用立即返回。Windows Sockets 鼓励使用非阻塞的异步操作,用消息鼓励使用非阻塞的异步操作,用消息来驱动可能引起阻塞的网络连接和数据传输函数。来驱动可能引起阻塞的网络连接和数据传输函数。基本数据结构Winsock.h 定义了Winsock.dll 使用的数据结构和函数SOCKET 句柄数据类型(套接字描述符/套接字号)typedef unsigned int u_int;typedef u_int
8、 SOCKET;网络地址结构:WinSock 使用 SOCKADDR_IN 结构来指定本地或与之建立socket 连接的远程端点地址。struct in_addr union struct u_char s_b1,s_b2,s_b3,s_b4;s_un_b;struct u_short s_w1,s_w2;s_un_w;u_long s_addr;typedef struct sockaddr_in SOCKADDR_IN;/*Socket address,internet style.*/struct sockaddr_in short sin_family;/地址族 AF_INET u_s
9、hort sin_port;/端口 struct in_addr sin_addr;/IP 地址 char sin_zero8;/填充位;WinSock WinSock 库函数库函数Windows Sockets 库函数分为三类库函数分为三类:1.套接字函数套接字函数2.数据库函数数据库函数3.扩展函数扩展函数-为适应为适应 Windows 下基于消下基于消息的网络编程的异步扩展函数息的网络编程的异步扩展函数标准标准 socket 函数函数(23个个)accept()使服务器等待来自某客户进程的实际连接。使服务器等待来自某客户进程的实际连接。bind()将一个本地地址分配给一个套接字将一个本地
10、地址分配给一个套接字(即命名即命名)closesocket()关闭套接字关闭套接字connect()Client 端向端向Server 发出连接请求发出连接请求ioctlsocket()控制套接字模式控制套接字模式getpeername()获取与指定套接字连接的对等方的名字获取与指定套接字连接的对等方的名字(SOCKADDR结构结构)getsockname()获取指定套接字的当前本地名字获取指定套接字的当前本地名字(SOCKADDR结构结构)getsockopt()获取与指定套接字相关的选项获取与指定套接字相关的选项htonl()将将32位长整数从主机字节顺序转为网络字节顺序位长整数从主机字节
11、顺序转为网络字节顺序htons()将将16位短整数从主机字节顺序转为网络字节顺序位短整数从主机字节顺序转为网络字节顺序inet_addr()将将 Internet 地址转换为地址转换为网络字符串地址网络字符串地址inet_ntoa()将网络字符串地址转换为将网络字符串地址转换为 Internet 地址地址listen()面向连接的服务器监听连接面向连接的服务器监听连接ntohl()将将32位长整数从网络字节顺序转为主机字节顺序位长整数从网络字节顺序转为主机字节顺序ntohs()将将32位长整数从网络字节顺序转为主机字节顺序位长整数从网络字节顺序转为主机字节顺序recv()在已建立连接的本地数据
12、报或流套接字在已建立连接的本地数据报或流套接字 s 上接收输入数据。上接收输入数据。recvfrom()给一个连接或未连接的套接字接收数据给一个连接或未连接的套接字接收数据select()执行多路执行多路同步同步I/O(复用复用)。用来检测一个或多个套接字的状态。用来检测一个或多个套接字的状态。send()在已建立连接的本地数据报或流套接字在已建立连接的本地数据报或流套接字 s 上发送输出数据。上发送输出数据。sendto()给一个连接或未连接的套接字发送数据给一个连接或未连接的套接字发送数据setsockopt()设置与指定套接字相关的选项设置与指定套接字相关的选项shutdown()关闭全
13、双工连接的一部分关闭全双工连接的一部分socket()创创建一个套接字建一个套接字数据库函数(7个)gethostbyaddr()通过网络地址获取名字和地址通过网络地址获取名字和地址gethostbyname()通过主机名获取名字和地通过主机名获取名字和地址址gethostname()获取本地主机获取本地主机getservbyport()通过端口号获取服务名和端口通过端口号获取服务名和端口getservbyname()通过主机名获取名字和地址通过主机名获取名字和地址getprotobynumber()通过协议号获取协议名和协议号通过协议号获取协议名和协议号getprotobyname()通过协
14、议名获取协议名和协议号通过协议名获取协议名和协议号专有扩展函数专有扩展函数(16个个WSA:Windows Sockets Asynchronous)1.WSAStartup()初始化隐含的初始化隐含的 Windows Sockets DLL。2.WSACleanup()终止使用隐含的终止使用隐含的 Windows Sockets DLL。3.WSASetLastError()设置设置 Windows Sockets API 最近的错误号。最近的错误号。4.WSAGetLastError()获取获取 Windows Sockets API 最近的错误号。最近的错误号。5.WSAIsBlocki
15、ng()检测隐含的检测隐含的 WinSock DLL 是否阻塞了一个当前的线程的调用。是否阻塞了一个当前的线程的调用。6.WSAUnhookBlockingHook()恢复原来的恢复原来的阻塞处理函数。阻塞处理函数。7.WSASetBlockingHook()设置应用程序自己的阻塞处理函数。设置应用程序自己的阻塞处理函数。8.WSAAsyncGetServByName()9.WSAAsyncGetServByPort()10.WSAAsyncGetProtoByName()11.WSAAsyncGetProtoByNumber()12.WSAAsyncGetHostByName()13.WSA
16、AsyncGetHostByAddr()14.WSACancelAsyncRequest()取消取消 WSAAsyncGetXByY()执行中的实例。执行中的实例。15.WSAAsyncSelect()select()的异步版本。的异步版本。16.WSACancelBlockingCall()取消一个执行中的阻塞取消一个执行中的阻塞 API 调用。调用。主要库函数创建套接字创建套接字 socket()socket()SOCKET SOCKET socket(intsocket(int af,intaf,int type,inttype,int protocol);protocol);afaf:
17、通讯区域,通讯区域,AF_UNIXAF_UNIX,AF_INET,AF_NS.AF_INET,AF_NS.DOS,Windows DOS,Windows支持下支持下AF_INET.AF_INET.type:type:套接字类型套接字类型,默认为默认为0 0(SOCK_STREAMSOCK_STREAM)。)。protocol:protocol:套接字用特定协议,默认为套接字用特定协议,默认为0 0(不用特定协议)。(不用特定协议)。指定本地地址指定本地地址 bind()bind()将创建的套接字与本地地址连接。将创建的套接字与本地地址连接。intint bind(SOCKET s,const
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows Socket编程实验要求 Socket 编程 实验 要求
限制150内