




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络软件设计,套接字接口函数,制作主讲,段景山,2,socket函数调用,socket(),bind(),listen(),accept(),recv(),send(),closesocket(),recvfrom(),sendto(),connect(),select(),setsockopt(),ioctlsocket(),shutdown(),通信类,控制类,getpeername(),getsockname(),getsockopt(),信息类,htonl(),htons(),ntohl(),ntohs(),inet_addr(),inet_ntoa(),辅助类,3,socket(),SOCKETWSAAPIsocket(INintaf,INinttype,INintprotocol),SOCKET类型就是int类型(见winsock.h中的定义),WSAAPI:说明函数是WindowsSocketApplicationApplicationProgrammingInterface函数,IN:表示参数的作用是输入,OUT:表示参数作用为输出,4,SOCKETsocket(INintaf,INinttype,INintprotocol),af:地址族类型,tcp/ip使用AF_INET,socket(),type:套接字类型,,SOCK_STREAM,SOCK_DGRAM,SOCK_RAW,SOCK_RDM,SOCK_SEQPAKCET,默认情况下使用TCP协议,默认情况下使用UDP协议,数据直接封装在IP分组内,功能:建立一个套接口结构,将其描述符交给调用者,protocol:协议号,一般设置为0,返回:套接字描述符,实验:测试socket()的各个参数,如使用非常规的af,type,protocol来测试,5,bind(),intbind(INSOCKETs,INstructsockaddr*name,INintnamelen),s:套接字描述符,name:本地端点(套接字)地址结构指针,namelen:本地端点(套接字)地址结构大小,功能:建立套接字和端点之间的关系确定“我是谁”,返回:正确建立为0,否则为SOCKET_ERROR,实验:能否在一个套接字描述符上两次绑定不同端点不可以,PPT3Page5Test1工程。能否在不同的套接字上绑定同一个端点不可以,PPT3Page5Test2工程。,6,listen(),intlisten(INSOCKETs,INintbacklog),s:套接字描述符,backlog:设置同时监听的连接个数,最好不设置为0,目前最大为5,功能:设置套接字为监听模式。服务器模式,返回:设置成功为0,否则为SOCKET_ERROR,实验:如何通过backlog来限制同时接收的连接个数,设计实验方案,预期的结果,(1),7,connect(),intconnet(INSOCKETs,INstructsockaddr*name,INintnamelen),s:套接字描述符,name:端点(套接字)地址结构指针,namelen:端点(套接字)地址结构大小,功能:与服务器建立连接,返回:连接成功为0,不成功为1,实验:服务器的地址可以是INADDR_ANY吗?为什么?不可以,客户机要确定服务器是谁。连接前一定要绑定本地端点吗?不一定,如果不绑定则当connect语句执行后系统分配一个端口给客户机,8,accept(),SOCKETaccept(INSOCKETs,OUTstructsockaddr*addr,INOUTint*addrlen),addr:远端点(套接字)地址结构指针,addrlen:远端点(套接字)地址结构大小指针,s:套接字描述符,功能:接受一个对方调用connect()请求的连接。该连接将在返回的新套接字上完成,返回:连接所在的新套接字描述符,不成功则为1,输出:addr远端点地址,addrlen远端点地址结构大小,实验:addr在调用前是否一定要填入内容,addrlen呢?不用,当客户机请求连接后再填。思考:客户认为已建立连接是在之前还是之后?,9,recv(),intrecv(INSOCKETs,OUTchar*buf,INintlen,INintflags),s:套接字描述符,buf:接收缓冲区的指针,len:接收缓冲区大小,思考:为什么要设置len避免客户机发过来的字符数超出buf的大小,flags:接收方式,一般为0。,MSG_OOB:读取带外数据MSG_PEEK:数据不从队列中取出,实验:MSG_PEEK的作用,功能:从套接字接收数据,数据将放在buf所指的缓冲区内。通过返回值,调用者可以获得真正接收的字节数。,返回:接收的字节数,输出:buf缓冲区内将填入接收的数据,10,send(),intsend(INSOCKETs,INchar*buf,INintlen,INintflags),s:套接字描述符,buf:发送缓冲区的指针,len:发送的字节数,flags:发送方式,一般为0。,功能:从套接字发送数据,用户事先准备好数据,放在buf里。,返回:真正发送的字节数,思考:len的作用,和recv中的len有什么区别,MSG_OOB:发送带外数据MSG_DONTROUTE:数据外送时,不做路由选择,11,recvfrom(),intrecvfrom(INSOCKETs,OUTchar*buf,INintlen,INintflags,OUTstructsockaddr*from,INOUTint*fromlen),s:套接字描述符,buf:接收缓冲区的指针,len:接收缓冲区大小,flags:接收方式,一般为0。,from:远端点结构指针,fromlen:远端点结构大小指针,功能:在套接字接收数据,并捕获发送远端点地址。,返回:接收的字节数,输出:buf缓冲区内将填入接收的数据,from中将填入远端点信息,fromlen中将填入远端点结构大小,思考:和recv有什么区别,12,sendto(),intsendto(INSOCKETs,INchar*buf,INintlen,INintflags,INstructsockaddr*to,INinttolen),s:套接字描述符,buf:发送缓冲区的指针,len:发送的字节数,flags:发送方式,一般为0。,功能:从套接字发送数据,用户事先准备好数据,放在buf里。,to:远端点地址结构指针,tolen:远端点地址结构大小,返回:真正发送的字节数,思考:与send的区别,在这些函数中为什么有些时候端点地址结构大小传值而有些时候传指针?,13,shutdown(),intshutdown(INSOCKETs,INinthow),s:套接字描述符,how:断开连接方式,功能:可以三种方式断开连接,how为0(SD_RECEIVE):套接字不再提供接收数据服务,how为1(SD_SEND):套接字不再提供发送数据服务,how为2(SD_BOTH):套接字不再提供接收数据和发送,注意,这将发出一个FIN,数据服务,返回:正确执行为0,否则为1,实验:三种方式下的效果。,14,closesocket(),intclosesocket(INSOCKETs),s:套接字描述符,功能:关闭套接字,如果套接字上有连接,则连接也关闭了,返回:成功为0。,思考:closesocket与shutdown的区别,本质区别,小结,以套接字为主关键参数所有的通信类和控制类函数关于地址结构长度参数有时候是形参,有时是实参有时是整型变量,有时是整型指针有时是输入,有时是输出,有时是输入和输出关于套接字函数返回值的处理通信程序是需要双方配合的,如果对方没有按照预想的配合,应该有应对措施。应对措施之一,依靠函数错误返回值,避免自己的流程以错误的姿态进入,15,16,关于错误处理,套接字函数的返回值中,为0多数表示为成功执行为1表示错误(SOCKET_ERROR),在windows系统下,也可通过WSAGetLastError()来取得进一步的出错代号,例:1,if(bind(s,)=SOCKET_ERROR)error_num=WSAGetLastError();,当出错以后,通过getsockopt()设置为SO_ERROR来获得进一步的出错代号,if(bind(s,)=SOCKET_ERROR)getsockopt(s,SOL_SOCKET,SO_ERROR,例:2,思考:获得错误代码以后,程序的处理模式,17,关于错误处理,错误代码:在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源汽车挂靠运营合作协议模板
- 2025年通信基站电气设备安装与优化升级协议
- 2025二手车二手车经销商培训服务合同范本
- 2025年度地磅称重系统销售与售后技术支持协议
- 2025处理离婚财产争议协议范本:夫妻共同财产处理流程详解
- 2025版砂石行业供销合同模板与解析
- 2025年二手家居用品转让定金合同模板参考
- 2025装配式建筑部品部件标准化设计在装配式建筑装配式阳台预制构件施工中的应用报告
- 2025年新型智能电脑及配件研发购销合同
- 2025第一节智能制造产业链协同创新合作协议书编号:XX027
- 人教版数学四年级上册全册课本练习题精心整理可编辑可打印
- 退费账户确认书
- 郑州市第四中学新初一分班(摸底)语文模拟试题(5套带答案)
- 2-第二章-各向异性材料的应力-应变关系
- 医院防爆反恐应急预案
- 云南省安全员C证考试题库及答案
- 死亡待遇申请表
- 集中供热管网系统一次网的调节方法
- 无线充电技术在汽车上的应用
- 马工程《刑法学(下册)》教学课件 第17章 危害国家安全罪
- 11科室临床路径、单病种管理目录
评论
0/150
提交评论