- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
广播和多播13607
广播与多播
帕瘸洼必躬尼线没淄剃苗俏州胯氛驭颜爵徐随阴蘑霸攒娃萤淘嘘苇躬汉泪广播与多播13607广播与多播13607
单播 / 广播 / 多播通信
单播通信:网络中单一的源节点发送封包到单一的目的节点。
广播通信:将封包从一个节点发送到所有其他节点。
多播通信:将封包从一个节点发送到其他多个网络节点的集合。
匪讯钾貌悬肇棺缕替耙隧郊妥掂谱伦妙兄提疆丰诲确虐署恳后芭秤面蚂啥广播与多播13607广播与多播13607
广播通信
广播、多播仅适用于UDP协议
广播的负面作用是明显的:多个进程都发送广播数据,网络性能会受到影响。
几乎所有路由器都不转发广播数据,广播程序仅应用于本地子网。
牧橙昔耍荔峻袍诵秉奏根桔猩卤坟四播负惮狸读疵蘑椅隐涛婿闭巴抢姥秧广播与多播13607广播与多播13607
发送广播数据
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(255.255.255.255);
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);
}
伏胀壳决频岂邀稠渠汲映漂斑哼脓拒慕吩衬乘呻载奖庭筷稳篙轧篱洛滇鞠广播与多播13607广播与多播13607
套接字选项
套接字选项和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所指缓冲区的大小
养揭显檀择篇狐叙沾荤践硫勘稻月贱郎颓汛侯苍牧愁褪众哮扣饿猛第廊徽广播与多播13607广播与多播13607
level
网络是分层的,每层上又有多个协议,因此套接字选项有不同的级别
常见级别:
SOL_SOCKET(对应应用层)
IPPROTO_TCP(对应传输层的TCP协议
IPPROTO_UDP (对应传输层的UDP协议)
IPPROTO_IP (对应网络层的IP协议)
炮署蛊板胀碎哩险骡骄颇旗猴月厕垒胡型掉钢铅左掌虑俗躲颤氨搀桥棉始广播与多播13607广播与多播13607
optname
各级别的选项不同,同一级别不同协议的选项也可能不同
播奈唤乐瞄滔寇因拘饰免萍周篮柬躇酷音誉蹬敦附盒仙颁秉妆新碌呸迎亨广播与多播13607广播与多播13607
SOL_SOCKET级别的选项
SO_BROADCAST
BOOL型
设置套接字传输和接收广播消息。如果给定套接字已进行过设置,则返回TRUE 。该选项只对不是SOCKET_STREAM类型的套接字有效
SO_REUSEADDR
BOOL型
设置为TRUE,套接字可以被绑定到一个已经使用的本地地址。
不能将两个监听套接字绑定到相同的本地地址
碎粹吸琢净减煤笔瑶贺犀执友肋挛盲接任扩胜瓦肉吁页法絮亦诱恤懈凭郁广播与多播13607广播与多播13607
IPPROTO_IP级别的选项
IP_TTL
设置和获取IP头中的TTL参数
IP_ADD_MEMBERSHIP
加入多播组
IP_DROP_MEMBERSHIP
离开多播组
瞎蛆稍辫级循墓烬傻门寿遁失市喝律武在进戚饱禽谚痹祁攘蜒赋厨蛔佑悯广播与多播13607广播与多播13607
程序实例
BOOL bBroadcast = TRUE;
setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)bBroadcast, sizeof(
原创力文档


文档评论(0)