您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > 第5章-Socket编程基础
LOGO第5章Socket编程基础教师:张宝军短号:652463Email:zbjhover@zju.edu.cn主要内容§5.1Socket协议原理§5.2WinSock编程基础§5.3面向连接的Socket编程§5.4面向非连接的Socket编程§5.5Socket选项学习目标了解Socket的由来掌握Socket的概念和工作原理掌握WinSock编程掌握面向连接和无连接Socket编程熟悉Socket选项§5.1Socket协议原理Socket的起源又称“套接字”加州大学伯克利(Berkeley)分校BSDUNIX(BerkeleySoftwareDistributionUNIX)一种进程间通信机制Socket的发展BerkeleySocketWindowsSocket§5.1Socket协议原理(cont.)Socket工作原理§5.1Socket协议原理(cont.)网络应用程序与套接字关系§5.1Socket协议原理(cont.)Socket编程的层次结构§5.1Socket协议原理(cont.)Socket分类流套接字(SOCK_STREAM):•基于TCP•不支持广播和多播数据报套接字(SOCK_DGRAM)•基于UDP•支持广播和多播原始套接字(SOCK_RAW)•不基于TCP/UDP•避开TCP/IP处理机制比较项目流式套接字数据报式套接字建立和释放连接√×保证数据到达√×按发送顺序接收数据√×通讯数据包含完整的目的地址信息×√§5.2WinSock编程基础WinSock介绍BSDSocket的Windows版本目前有两个主要版本•WinSock1:只支持TCP/IP网络•WinSock2:支持更多协议§5.2WinSock编程基础(cont.)WinSock版本、头文件、库文件VS版本WinSock版本头文件库文件引用方法6.01.1winsock.hwsock32.lib#includewinsock.h#pragmacomment(lib,wsock32.lib)20052.2winsock2.hws2_32.lib#includewinsock2.h#pragmacomment(lib,ws2_32.lib)20082.2winsock2.hws2_32.lib#includewinsock2.h#pragmacomment(lib,ws2_32.lib)§5.2WinSock编程基础(cont.)数据结构WSADATA•作用:用于存储WindowsSocket初始化信息•头文件:winsock2.h结构体#defineWSADESCRIPTION_LEN256#defineWSASYS_STATUS_LEN128typedefstructWSAData{WORDwVersion;WORDwHighVersion;#ifdef_WIN64unsignedshortiMaxSockets;unsignedshortiMaxUdpDg;charFAR*lpVendorInfo;charszDescription[WSADESCRIPTION_LEN+1];charszSystemStatus[WSASYS_STATUS_LEN+1];#elsecharszDescription[WSADESCRIPTION_LEN+1];charszSystemStatus[WSASYS_STATUS_LEN+1];unsignedshortiMaxSockets;unsignedshortiMaxUdpDg;charFAR*lpVendorInfo;#endif}WSADATA,FAR*LPWSADATA;结构体(cont.)字段含义wVersionWindowsSocketsDLL期望调用者使用的WindowsSockets规范的版本,为WORD类型。高位字节中存储副版本号,低位字节中存储高版本号。可以使用MAKEWORD()函数返回该值,例如MAKEWORD(2,2)wHighVersionWindowsSocketsDLL可以支持的WindowsSockets规范的最高版本szDescription以null结尾的ASCII字符串。WindowsSocketsDLL将对WindowsSockets实现的描述复制到该字符串中,最多可以包含256个字符szSystemStatus以null结尾的ASCII字符串。WindowsSocketsDLL将有关状态或配置信息复制到该字符串中iMaxSockets单个进程可以打开的最大套接口数量。WindowsSockets可以提供一个全局的套接口,为每个进程分配套接口资源。程序员可以使用该多好数字作为WindowsSockets是否可以被应用程序使用的原始依据iMaxUdpDgWindowsSockets应用程序能够发送或接收的最大UDP数据包大小,单位为字节。如果实现方式没有限制,则iMaxUdpDg等于0lpVendorInfo指向销售商数据结构的指针§5.2WinSock编程基础(cont.)函数WSAStartup()•作用:初始化WindowsSocket•头文件:winsock2.hintWSAStartup(__inWORDwVersionRequested,__outLPWSADATAlpWSAData);__in:输入参数__out:输出参数WORD:2BytesDWORD:4Bytes地址表示形式点分十进制:192.168.1.158无符号长整型(unsignedlong)网络字节序(NBO,NetworkByteOrder)主机字节序(HBO,HostByteOrder)structin_addr{union{struct{u_chars_b1,s_b2,s_b3,s_b4;}S_un_b;struct{u_shorts_w1,s_w2;}S_un_w;u_longS_addr;}S_un;参数说明如下:S_un_b,由4个u_char变量组成的主机格式IP地址。S_un_w,由2个u_short变量组成的主机格式IP地址。S_addr,以u_long变量表示的主机格式IP地址地址的转换inet_addr()将点分法IP地址字符串转换为in_addr结构体中的IP地址格式inet_ntoa()将in_addr结构体中的IP地址转换为点分法IP地址字符串charFAR*inet_ntoa(structin_addrin);unsignedlonginet_addr(constchar*cp);字节序举例网络字节序举例:十进制数100000,186A0H,存入int变量注:只有双字节和4字节数需要做字节序变换,单字节不需要。函数定义(include\linux\byteorder\Generic.h):htons(x),htonl(x)ntohs(x),ntohl(x)§5.3面向连接的Socket编程断开连接优雅断开(GracefulDisconnect)shutdown():停止数据收发,防止数据丢失,通信的任何一端发起皆可closesocket():关闭套接字,释放套接字资源中断断开(AbortiveDisconnect)closesocket():关闭套接字,释放套接字资源不调用shutdown()会造成数据丢失§5.4面向非连接的Socket编程无连接的C/S程序工作模型在编写无连接C/S模型的程序时,与面向连接不同:通信的一方可以不用bind函数绑定IP地址和端口,而由系统自动分配,但充当服务器的一方需事先绑定IP地址和端口。不绑定IP地址和端口的一方必须首先向绑定IP地址和端口的一方发送数据,即充当客户机进程。无连接应用进程也可以调用connect函数,但它不是用来向通信对方发出建立连接的请求,只是告诉内核并由内核保存,以便在数据传输过程中可以使用send和recv函数。在无连接的数据报传输过程中,虽然没有显式指定服务器方和客户机方,但是作为服务器的应用进程也必须先启动,否则客户机进程的请求传不到服务器进程;在无连接的数据传输过程中,客户和服务器进程无需事先建立通信连接,这样当发送数据时,发送方除了指定本地套接字的地址外,还需要指定接收方的套接字地址,即在数据收发过程中动态建立通信双方的通信连接。§5.5Socket选项作用:对Socket行为和属性进行控制,包括修改缓冲区大小函数getsockopt():获取套接字选项setsockopt():设置套接字选项()getsockopt()的函数原型如下:intgetsockopt(SOCKETs,intlevel,intoptname,char*optval,int*optlen);参数说明如下:s,套接字描述符。level,选项的级别,包括SOL_SOCKET和IPPROTO_TCP两个级别。optname,套接字选项的名称。optval,用于接收套接字值数据的缓冲区。optlen,optval缓冲区的大小。如果函数调用成功,则返回0;否则返回SOCKET_ERROR。可以调用WSAGetLastError()函()setsockopt()的函数原型如下:intsetsockopt(SOCKETs,intlevel,intoptname,constchar*optval,intoptlen);参数说明如下:s,套接字描述符。level,选项的级别,包括SOL_SOCKET和IPPROTO_TCP两个级别。optname,套接字选项的名称。optval,用于接收套接字值数据的缓冲区。optlen,optval缓冲区的大小。如果函数调用成功,则返回0;否则返回SOCKET_ERROR。这些属性可以描述套接字本身的属性和特征。本章小结本章重点Socket工作原理WinSock版本、头文件、库文件及引用方法WinSock编程的一般流程:连接和无连接IP地址的表示和转换作业教材习题P12•一、选择题•二、填空题P32•一、选择题•二、填空题LOGO
本文标题:第5章-Socket编程基础
链接地址:https://www.777doc.com/doc-5154188 .html