嵌入式应用程序设计综合教程 教学课件 ppt 作者 华清远见嵌入式学院 曾宏安 冯利美 第七章linux高级网络编程

上传人:E**** 文档编号:89462859 上传时间:2019-05-25 格式:PPTX 页数:29 大小:446.20KB
返回 下载 相关 举报
嵌入式应用程序设计综合教程 教学课件 ppt 作者  华清远见嵌入式学院 曾宏安 冯利美 第七章linux高级网络编程_第1页
第1页 / 共29页
嵌入式应用程序设计综合教程 教学课件 ppt 作者  华清远见嵌入式学院 曾宏安 冯利美 第七章linux高级网络编程_第2页
第2页 / 共29页
嵌入式应用程序设计综合教程 教学课件 ppt 作者  华清远见嵌入式学院 曾宏安 冯利美 第七章linux高级网络编程_第3页
第3页 / 共29页
嵌入式应用程序设计综合教程 教学课件 ppt 作者  华清远见嵌入式学院 曾宏安 冯利美 第七章linux高级网络编程_第4页
第4页 / 共29页
嵌入式应用程序设计综合教程 教学课件 ppt 作者  华清远见嵌入式学院 曾宏安 冯利美 第七章linux高级网络编程_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《嵌入式应用程序设计综合教程 教学课件 ppt 作者 华清远见嵌入式学院 曾宏安 冯利美 第七章linux高级网络编程》由会员分享,可在线阅读,更多相关《嵌入式应用程序设计综合教程 教学课件 ppt 作者 华清远见嵌入式学院 曾宏安 冯利美 第七章linux高级网络编程(29页珍藏版)》请在金锄头文库上搜索。

1、,Linux高级网络编程,www.embedu.org,TCP/IP网络编程进阶篇 常见协议头分析 网络超时检测 广播和组播 UNIX域套接字,www.embedu.org,TCP/IP协议网络封包格式,Ethernet header,IP header,TCP header,App. header,User data,Ethernet trailer,14,20,20,46 - 1500,www.embedu.org,以太网头,www.embedu.org,IP头,www.embedu.org,TCP头,www.embedu.org,UDP头,www.embedu.org,TCP/IP网络编

2、程进阶篇 常见协议头分析 网络超时检测 广播和组播 UNIX域套接字,www.embedu.org,网络超时,在网络通信中,很多操作会使得进程阻塞 TCP套接字中的recv/accept/connect UDP套接字中的recvfrom 超时检测的必要性 避免进程在没有数据时无限制地阻塞 当设定的时间到时,进程从原操作返回继续运行,www.embedu.org,网络超时检测(一),设置socket的属性 SO_RCVTIMEO 参考代码如下 struct timeval tv; tv.tv_sec = 5; / 设置5秒时间 tv.tv_usec = 0; setsockopt(sockfd,

3、 SOL_SOCKET, SO_RCVTIMEO, / 设置接收超时 recv() / recvfrom() / 从socket读取数据,www.embedu.org,网络超时检测(二),设置定时器(timer), 捕捉SIGALRM信号 参考代码如下 void handler(int signo) return; struct sigaction act; sigaction(SIGALRM, NULL, if (recv(,) 0) ,www.embedu.org,TCP/IP网络编程进阶篇 常见协议头分析 网络超时检测 广播和组播 UNIX域套接字,www.embedu.org,广播,前

4、面介绍的数据包发送方式只有一个接受方,称为单播 如果同时发给局域网中的所有主机,称为广播 只有用户数据报(使用UDP协议)套接字才能广播 广播地址 以192.168.1.0 (255.255.255.0) 网段为例,最大的主机地址192.168.1.255代表该网段的广播地址 发到该地址的数据包被所有的主机接收 255.255.255.255在所有网段中都代表广播地址,www.embedu.org,广播发送,创建用户数据报套接字 缺省创建的套接字不允许广播数据包,需要设置属性 setsockopt可以设置套接字属性 接收方地址指定为广播地址 指定端口信息 发送数据包,www.embedu.or

5、g,setsockopt,int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); 头文件: level : 选项级别(例如SOL_SOCKET) optname : 选项名(例如SO_BROADCAST) optval : 存放选项值的缓冲区的地址 optlen : 缓冲区长度 返回值:成功返回0 失败返回-1并设置errno,www.embedu.org,广播发送示例,sockfd = socket(,); int on = 1; setsockopt(sockfd, SOL_S

6、OCKET, SO_BROADCAST, ,www.embedu.org,广播接收,创建用户数据报套接字 绑定广播IP地址或INADDR_ANY和端口 绑定的端口必须和发送方指定的端口相同 等待接收数据,www.embedu.org,组播,单播方式只能发给一个接收方。 广播方式发给所有的主机。过多的广播会大量占用网络带宽,造成广播风暴,影响正常的通信。 组播(又称为多播)是一种折中的方式。只有加入某个多播组的主机才能收到数据。 多播方式既可以发给多个主机,又能避免象广播那样带来过多的负载(每台主机要到传输层才能判断广播包是否要处理),www.embedu.org,网络地址,A类地址 第1字节为

7、网络地址,其他3个字节为主机地址。第1字节的最高位固定为0 1.0.0.1 126.255.255.255 B类地址 第1字节和第2字节是网络地址,其他2个字节是主机地址。第1字节的前两位固定为10 128.0.0.1 191.255.255.255 C类地址 前3个字节是网络地址,最后1个字节是主机地址。第1字节的前3位固定为110 192.0.0.1 223.255.255.255 D类地址(组播地址) 不分网络地址和主机地址,第1字节的前4位固定为1110 224.0.0.1 239.255.255.255,www.embedu.org,组播发送,创建用户数据报套接字 接收方地址指定为组

8、播地址 指定端口信息 发送数据包,www.embedu.org,组播接收,创建用户数据报套接字 加入多播组 绑定本机IP地址和端口 绑定的端口必须和发送方指定的端口相同 等待接收数据,www.embedu.org,加入多播组,struct ip_mreq struct in_addr imr_multiaddr; struct in_addr imr_interface; ; struct ip_mreq mreq; bzero(,www.embedu.org,TCP/IP网络编程进阶篇 常见协议头分析 网络超时检测 广播和组播 UNIX域套接字,www.embedu.org,UNIX域套接字

9、,socket同样可以用于本地通信 创建套接字时使用本地协议PF_UNIX(或PF_LOCAL)。 分为流式套接字和用户数据报套接字 和其他进程间通信方式相比使用方便、效率更高 常用于前后台进程通信,www.embedu.org,UNIX域套接字,本地地址结构 struct sockaddr_un / sa_family_t sun_family; char sun_path108; / 套接字文件的路径 ; 填充地址结构 struct sockaddr_un myaddr; bzero(,www.embedu.org,UNIX域(流式)套接字,服务器端 socket(PF_UNIX, SOC

10、K_STREAM, 0) bind(,本地地址, ) listen(,) accept(,) recv() / send() ,www.embedu.org,UNIX域(流式)套接字,客户端 socket(PF_UNIX, SOCK_STREAM, 0) bind(,本地地址, ) / 可选 connect(,) recv() / send() ,www.embedu.org,UNIX域(用户数据报)套接字,服务器端 socket(PF_UNIX, SOCK_DGRAM, 0) bind(,本地地址, ) recvfrom() sendto(),www.embedu.org,UNIX域(用户数据报)套接字,客户端 socket(PF_UNIX, SOCK_DGRAM, 0) bind(,本地地址, ) / 可选 sendto() recvfrom() / 若没有绑定地址,无法接收数据 ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号