第02章 基本套接口编程.ppt

第02章 基本套接口编程.ppt

ID:62138931

大小:100.50 KB

页数:16页

时间:2020-02-26

第02章 基本套接口编程.ppt_第1页
第02章 基本套接口编程.ppt_第2页
第02章 基本套接口编程.ppt_第3页
第02章 基本套接口编程.ppt_第4页
第02章 基本套接口编程.ppt_第5页
资源描述:

《第02章 基本套接口编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基本套接字编程主要内容套接字基础套接字地址结构套接字基本函数套接字基础网络编程接口有两个发展方向:Socket,TLI套接字是一种网络API,程序员可以用之开发网络程序。进程1进程2网络编程接口(socket)网络通信协议服务接口(TCP/IP)底层通信协议和网络介质套接字类型套接字支持多种通信协议:Unix:Unix系统内部协议INET:IP版本4INET6:IP版本6Linux支持多种套接字类型,即应用程序希望的通信服务类型SOCKET_STREAM:双向可靠数据流,对应TCPSOCKET_DGRAM:双向不可靠数据报,对应UDPSOCKET_RAW:是低于

2、传输层的低级协议或物理网络提供的套接字类型,可以访问内部网络接口。例如接收和发送ICMP报套接字地址结构(IPv4)大多数套接字函数需要一个指向套接字地址结构的参数,每个协议族都定义它自己的套接字地址结构,一般以”sockaddr_”开头,并以协议簇为后缀。(netinet/in.h)typedefuint32_tin_addr_t;typedefuint16_tin_port_t;typedefunsignedshortsa_family_t;structin_addr{in_addr_ts_addr;};structsockaddr_in{uint8_tsi

3、n_len;sa_family_tsin_family;in_port_tsin_port;structin_addrsin_addr;charsin_zero[8];};这些结构在不同的系统上都有所不同structsockaddr_inserver……bzero(&server,sizeof(server))server.sin_family=AF_INET;server.sin_port=htons(PORT);server.sin_addr.s_addr=htonl(INADDR_ANY)…….IPv6地址为128位。(netinet/in.h)套接字地址

4、结构(IPv6)typedefuint16_tin_port_t;typedefunsignedshortsa_family_t;structin6_addr{uint8_ts6_addr[16];};structsockaddr_in6{uint8_tsin6_len;sa_family_tsin6_family;in_port_tsin6_port;uint32_tsin6_flowinfo;structin6_addrsin6_addr;};sin6_flowinfo成员分成三个字段:低24位是流量标号;下4位是优先级;再下4位保留IPv4与IPv6地址结

5、构比较长度AF_INET616位端口号32位流标签128位IPv6地址sockaddr_in6{}长度AF_INET16位端口号32位IP地址未用sockaddr_in{}固定长度(16字节)固定长度(24字节)通用套接字地址结构由于套接字函数需接收来自不同协议的地址结构,ANSI的办法是使用通用的指针类型,即(void*).套接字函数方法是定义一个通用的套接字地址结构。structsockaddr{uint8_tsa_len;sa_family_tsa_family;charsa_data[14];};这就要求调用套接字函数时,需将

6、指向特定于协议的地址结构的指针类型转换成指向通用的地址结构的指针,如:structsockaddr_inservbind(sockfd,(structsockaddr*)&serv,sizeof(serv));字节排序函数为保证”大端“和”小端“字节序的机器之间能相互通信,需在发送多字节整数时,将主机字节序转换成网络字节序,或反之。高序字节低序字节MSB(最高有效位)16位值LSB高序字节低序字节内存地址增大方向内存地址增大方向小端字节序大端字节序网络字节序字节排序函数(cont.)#includeuint16_thtons(uint

7、16_thostshort)uint32_thtonl(uint32_thostlong)均返回:网络字节序值uint16_tntohs(uint16_tnetshort)uint32_tntohl(uint32_tnetlong)均返回:主机字节序值h:主机n:网络s:短整数l:长整数字节操纵函数#includevoidbzero(void*dest,size_tnbytes);voidbcopy(constvoid*src,void*dest,size_tnbytes);intbcmp(constvoid*src,void*dest,si

8、ze_tnbytes);

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。