



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Python使用socket实现组播与发送二进制数据什么是组播
点对点连接可以处理很多通信需求,不过随着直接连接数的增加,在多对通信方之间传递相同的消息会变得越来越困难。
单独地向各个接收方发送消息会耗费额外的处理时间和带宽,这对于诸如完成流视频或音频操作的应用来说,代码会出现显著的性能问题。
而使用组播(multicast)向多个端点同时发送消息可以得到更好的效率,因为网络基础设施可以确保数据包会被传送到所有接收方。
组播消息总是使用UDP发送,因为TCP需要提供一对通信系统。组播的地址被称为组播组,这是常规的IPv4地址范围的一个子集(224.0.0.0~230.255.255.255),专门为主播通信预留。
这些地址会由网络路由器和交换机进行特殊的处理,所以发送到组的消息可以在互联网上被分发到加入这个组的所有接收方。
需要注意的是,大多数托管的路由器与交换机默认会禁止组播通信。如果后续运行程序有问题,那么可以检查你的网络设置。
发送组播消息
由于无法知道会收到多少响应,所以需要对套接字使用一个超时值,以避免等待回答时无限阻塞。
TTL(Time-To-Livevalue)是一个生存时间值,会控制多少网络接收这个数据包。要使用IP_MULTICAST_TTL选项与setsockopt()函数来设置TTL。默认值1表示路由器不会把数据包转发到当前网段之外。TTL最大取值255,应包包装为1个字节。
示例代码如下:
importsocket
importstruct
#1.创建一个套接字
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
multicast_group=('224.3.29.71',10000)
sock.settimeout(10)
ttl=struct.pack('b',1)#本博主数据结构与算法第10篇对struct二进制结构体进行介绍
sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,ttl)
msg="群发的消息,你不必回".encode('UTF-8')
sent=sock.sendto(msg,multicast_group)
whileTrue:
try:
data,server=sock.recvfrom(1024)
exceptsocket.timeout:
print('timeout')
break
else:
print(data,server)
finally:
sock.close()
这里的代码与UDP类似,除了sock.setsockopt()的调用。
接收组播消息
建立组播接收者的第一步是创建UDP套接字。创建常规的套接字并绑定到一个端口后,可以使用setsockopt()改变IP_ADD_MEMBERSHIP选项,增加安东组播组。
这个选项值是组播地址的一个8字节的打包表示,后面是服务器监听通信流的网络接口,由其IP地址标识。这里,接收者使用INADDR_ANY监听所有接口。
示例代码如下:
importsocket
importstruct
multicast_group='224.3.29.71'
server_address=('',10000)
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(server_address)
group=socket.inet_aton(multicast_group)
mreq=struct.pack('4sL',group,socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)
whileTrue:
data,address=sock.recvfrom(1024)
print(data.decode('UTF-8'),a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化妆品零售行业商业计划书:2025年线下门店销售策略研究
- 烹饪文化自媒体行业深度调研及发展项目商业计划书
- 电视广告在线平台企业制定与实施新质生产力项目商业计划书
- 游戏场景设计服务企业制定与实施新质生产力项目商业计划书
- 学科特长培养企业制定与实施新质生产力项目商业计划书
- 学习障碍辅导服务企业制定与实施新质生产力项目商业计划书
- 实体唱片店行业深度调研及发展项目商业计划书
- 创意视觉设计平台企业制定与实施新质生产力项目商业计划书
- 水上运动健身行业跨境出海项目商业计划书
- 试题-铁人中学2023级高二下学期期中考试数学试题
- 2024年江西省中考生物试卷(含答案)
- 办公楼室内装饰工程施工设计方案技术标范本
- 2024年无锡市滨湖区名小六年级毕业考试语文模拟试卷
- 校服供货服务方案
- 中职语文基础模块下册第六单元测试卷-【中职专用】(高教版2023基础模块下册)解析版
- C6150车床主轴箱箱体加工工艺及夹具说明书
- 健康与免疫智慧树知到期末考试答案2024年
- 新媒体视频节目制作 课件 学习领域1 新闻短视频制作
- 矿山应急救援钻探技术规范
- 秦始皇帝陵的物探考古调查863计划秦始皇陵物探考古进展情况的报告
- (完整)中医症候积分量表
评论
0/150
提交评论