网络软件设计1.3——套接字接口函数_第1页
网络软件设计1.3——套接字接口函数_第2页
网络软件设计1.3——套接字接口函数_第3页
网络软件设计1.3——套接字接口函数_第4页
网络软件设计1.3——套接字接口函数_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络软件设计套接字接口函数2socket 函数调用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( )辅助类3socket ( )SOCKET WSAAPI so

2、cket( IN int af, IN int type, IN int protocol)SOCKET类型就是int 类型(见winsock.h 中的定义)WSAAPI:说明函数是Windows Socket Application Application Programming Interface函数IN:表示参数的作用是输入OUT:表示参数作用为输出4SOCKET socket( IN int af, IN int type, IN int protocol)af:地址族类型,tcp/ip使用AF_INETsocket ( )type:套接字类型,SOCK_STREAMSOCK_DGRA

3、MSOCK_RAWSOCK_RDMSOCK_SEQPAKCET默认情况下使用TCP协议默认情况下使用UDP协议数据直接封装在IP分组内功能:建立一个套接口结构,将其描述符交给调用者protocol:协议号,一般设置为0返回:套接字描述符实验:测试socket()的各个参数,如使用非常规的af,type,protocol来测试5bind ( )int bind ( IN SOCKET s, IN struct sockaddr * name, IN int namelen)s: 套接字描述符name:本地端点(套接字)地址结构指针namelen:本地端点(套接字)地址结构大小功能:建立套接字和端

4、点之间的关系确定“我是谁”返回:正确建立为0,否则为SOCKET_ERROR实验:能否在一个套接字描述符上两次绑定不同端点 能否在不同的套接字上绑定同一个端点6listen ( )int listen(IN SOCKET s,IN int backlog)s: 套接字描述符backlog: 设置同时监听的连接个数,最好不设置为0, 目前最大为5功能:设置套接字为监听模式。服务器模式返回:设置成功为0,否则为SOCKET_ERROR实验:如何通过backlog来限制同时接收的连接个数设计实验方案,预期的结果(1)7connect ( )int connet(IN SOCKET s,IN stru

5、ct sockaddr * name, IN int namelen)s: 套接字描述符name:端点(套接字)地址结构指针namelen:端点(套接字)地址结构大小功能:与服务器建立连接返回:连接成功为0,不成功为1实验:服务器的地址可以是INADDR_ANY吗?为什么? 连接前一定要绑定本地端点吗?8accept ( )SOCKET accept( IN SOCKET s, OUT struct sockaddr * addr, IN OUT int * addrlen )addr:远端点(套接字)地址结构指针addrlen:远端点(套接字)地址结构大小指针s: 套接字描述符功能:接受一个

6、对方调用connect()请求的连接。该连接将在返回的新套接字上完成返回:连接所在的新套接字描述符,不成功则为1输出:addr 远端点地址addrlen 远端点地址结构大小实验:addr在调用前是否一定要填入内容,addrlen呢?思考:客户认为已建立连接是在之前还是之后?9recv ( )int recv( IN SOCKET s, OUT char * buf, IN int len, IN int flags)s: 套接字描述符buf:接收缓冲区的指针len:接收缓冲区大小思考:为什么要设置lenflags:接收方式,一般为0。MSG_OOB:读取带外数据MSG_PEEK:数据不从队列中

7、取出实验:MSG_PEEK的作用功能:从套接字接收数据,数据将放在buf所指的缓冲区内。通过返回值,调用者可以获得真正接收的字节数。返回:接收的字节数输出:buf缓冲区内将填入接收的数据10send ( )int send( IN SOCKET s, IN char * buf, IN int len, IN int flags)s: 套接字描述符buf:发送缓冲区的指针len:发送的字节数flags:发送方式,一般为0。功能:从套接字发送数据,用户事先准备好数据,放在buf里。返回:真正发送的字节数思考:len的作用,和recv中的len有什么区别MSG_OOB:发送带外数据MSG_DONT

8、ROUTE:数据外送时,不做路由选择11recvfrom ( )int recvfrom( IN SOCKET s, OUT char * buf, IN int len, IN int flags, OUT struct sockaddr * from, IN OUT int * fromlen)s: 套接字描述符buf:接收缓冲区的指针len:接收缓冲区大小flags:接收方式,一般为0。from:远端点结构指针fromlen:远端点结构大小指针功能:在套接字接收数据,并捕获发送远端点地址。返回:接收的字节数输出:buf缓冲区内将填入接收的数据from中将填入远端点信息fromlen中将填

9、入远端点结构大小思考:和recv有什么区别12sendto ( )int sendto( IN SOCKET s, IN char * buf , IN int len, IN int flags, IN struct sockaddr * to, IN int tolen)s: 套接字描述符buf:发送缓冲区的指针len:发送的字节数flags:发送方式,一般为0。功能:从套接字发送数据,用户事先准备好数据,放在buf里。to:远端点地址结构指针tolen:远端点地址结构大小返回:真正发送的字节数思考:与send的区别在这些函数中为什么有些时候端点地址结构大小传值而有些时候传指针?13shu

10、tdown ( )int shutdown( IN SOCKET s, IN int how)s: 套接字描述符how:断开连接方式功能:可以三种方式断开连接how为0(SD_RECEIVE): 套接字不再提供接收数据服务how为1(SD_SEND): 套接字不再提供发送数据服务how为2(SD_BOTH): 套接字不再提供接收数据和发送注意,这将发出一个FIN数据服务返回:正确执行为0, 否则为1实验:三种方式下的效果。14closesocket ( )int closesocket( IN SOCKET s)s: 套接字描述符功能:关闭套接字,如果套接字上有连接,则连接也关闭了返回:成功为

11、0。思考:closesocket与shutdown的区别,本质区别小结以套接字为主关键参数所有的通信类和控制类函数关于地址结构长度参数有时候是形参,有时是实参有时是整型变量,有时是整型指针有时是输入,有时是输出,有时是输入和输出关于套接字函数返回值的处理通信程序是需要双方配合的,如果对方没有按照预想的配合,应该有应对措施。应对措施之一,依靠函数错误返回值,避免自己的流程以错误的姿态进入1516关于错误处理套接字函数的返回值中,为0多数表示为成功执行 为1表示错误(SOCKET_ERROR)在windows系统下,也可通过WSAGetLastError()来取得进一步的出错代号例:1if(bind(s,) = SOCKET_ERROR) error_num = WSAGetLastError( );当出错以后,通过getsockopt()设置为SO_ERROR来获得进一步的出错代号if(bind(s,) = SOCKET_ERROR) getsockopt( s, SOL_SOCKET, SO_ERROR, &error_num, sizeof( error_num ) );例:2思考:获得错误代码以后,程序的处理模式17关于错误处理错误代码:在winsock.h中查询if(bin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论