- 1、本文档共71页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络程序设计6传输层协议UDP和TCP
广播和多播 单播通信:网络中单一的源节点发送封包到单一的目的节点。 广播通信:将封包从一个节点发送到所有其他节点。 多播通信:将封包从一个节点发送到其他多个网络节点的集合。 广播通信 广播、多播仅适用于UDP协议 广播的负面作用是明显的:多个进程都发送广播数据,网络性能会受到影响。 几乎所有路由器都不转发广播数据,广播程序仅应用于本地子网。 数据过滤过程 广播地址的分类 受限的广播 受限的广播地址是55。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。 在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。 指向网络的广播 指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。 一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。 指向子网的广播 指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。例如,如果路由器收到发往55的数据报,当B类网络128.1的子网掩码为时,该地址就是指向子网的广播地址;但如果该子网的掩码为,该地址就不是指向子网的广播地址。 指向所有子网的广播 指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。例如,如果目的子网掩码为,那么IP地址55是一个指向所有子网的广播地址。然而,如果网络没有划分子网,这就是一个指向网络的广播。 发送广播数据 SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0); // 有效SO_BROADCAST选项 BOOL bBroadcast = TRUE; ::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)bBroadcast, sizeof(BOOL)); // 设置广播地址,这里的广播端口号(电台)是4567 SOCKADDR_IN bcast; bcast.sin_family = AF_INET; bcast.sin_addr.s_addr = INADDR_BROADCAST; // ::inet_addr(55); bcast.sin_port = htons(4567); // 发送广播 printf( 开始向4567端口发送广播数据... \n \n); char sz[] = This is just a test. \r\n; while(TRUE) { ::sendto(s, sz, strlen(sz), 0, (sockaddr*)bcast, sizeof(bcast)); ::Sleep(5000); } 套接字选项 套接字选项和I/O控制命令用于改变套接字的默认行为 主要的函数: getsockopt(SOCKET s,int level,int optname,char* optval,int* optlen); setsockopt(SOCKET s,int level,int optname,char* optval,int optlen); s:套接字句柄 level:指定选项定义在哪个级别 optname:套接字选项名称 optval:指定一个缓冲区,用于选项的值 optlen:optval所指缓冲区的大小 level 网络是分层的,每层上又有多个协议,因此套接字选项有不同的级别 常见级别: SOL_SOCKET(对应应用层) IPPROTO_TCP(对应传输层的TCP协议 IPPROTO_UDP (对应传输层的UDP协议) IPPROTO_IP (对应网络层的IP协议) optname 各级别的选项不同,同一级别不同协议的选项也可能不同 SOL_SOCKET级别的选项 SO_BROADCAST BOOL型 设置套接字传输和接收广播消息。如果给定套接字已进行过设置,则返回TRUE 。该选项只对不是SOCKET_STREAM类型的套接字有效 SO_REUSEADDR BOOL型 设置为TRUE,套接字可以被绑定到一个已经使用的本地地址。 不能将两个监听套接字绑定到相同的本地地址 IPPROTO_IP级别的选项 IP_TTL 设置和获取IP头中的TTL参数 IP_ADD_MEMBERSHIP 加入多播组 IP_DROP_MEMBERSHIP 离开多播组 程序实例 BOOL bBroadcast = TRUE; setsockopt(s, SOL_SOCKET, SO_B
文档评论(0)