网络软件设计3——套接字接口函数详解.ppt
文本预览下载声明
段景山 网络软件设计 套接字接口函数 制作 主讲 段景山 * 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( ) 辅助类 * socket ( ) SOCKET WSAAPI socket( IN int af, IN int type, IN int protocol) SOCKET类型就是int 类型(见winsock.h 中的定义) WSAAPI:说明函数是Windows Socket Application Application Programming Interface函数 IN:表示参数的作用是输入 OUT:表示参数作用为输出 * SOCKET socket( IN int af, IN int type, IN int protocol) 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来测试 * bind ( ) int bind ( IN SOCKET s, IN struct sockaddr * name, IN int namelen) s: 套接字描述符 name:本地端点(套接字)地址结构指针 namelen:本地端点(套接字)地址结构大小 功能:建立套接字和端点之间的关系--确定“我是谁” 返回:正确建立为0,否则为SOCKET_ERROR 实验:能否在一个套接字描述符上两次绑定不同端点 不可以,PPT3Page5Test1工程。 能否在不同的套接字上绑定同一个端点 不可以,PPT3Page5Test2工程。 * listen ( ) int listen(IN SOCKET s,IN int backlog) s: 套接字描述符 backlog: 设置同时监听的连接个数,最好不设置为0, 目前最大为5 功能:设置套接字为监听模式。服务器模式 返回:设置成功为0,否则为SOCKET_ERROR 实验:如何通过backlog来限制同时接收的连接个数 设计实验方案,预期的结果 (-1) * connect ( ) int connet(IN SOCKET s,IN struct sockaddr * name, IN int namelen) s: 套接字描述符 name:端点(套接字)地址结构指针 namelen:端点(套接字)地址结构大小 功能:与服务器建立连接 返回:连接成功为0,不成功为-1 实验:服务器的地址可以是INADDR_ANY吗?为什么? 不可以,客户机要确定服务器是谁。 连接前一定要绑定本地端点吗? 不一定,如果不绑定则当connect语句执行后系统分配 一个端口给客户机 * accept ( ) SOCKET accept( IN SOCKET s, OUT struct sockaddr * addr, IN OUT int * addrlen ) addr:远端点(套接字)地址结构指针 addrlen:远端点(套接字)地址结构大小指针 s: 套接字
显示全部