栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

简单的Python UDP服务器:无法从本地主机以外的客户端接收数据包

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简单的Python UDP服务器:无法从本地主机以外的客户端接收数据包

尝试绑定到接收方的所有本地接口:

sock.bind(("", UDP_PORT)) # could also use "0.0.0.0"

请注意,在接收UDP数据包时,特别是对于多播流量而言,就绑定而言,操作系统的行为并不完全是逻辑(也不是一致的)。这是您得到的行为:

Linux:绑定到特定IP将 过滤 传入的UDP数据包,只有针对该特定IP的数据包将通过过滤器。例如,这意味着当绑定到IP
192.168.1.100时,将 不会 接收到IP
192.168.1.100的接口收到的多播UDP数据包。在Linux上,普通绑定不会绑定到接口。为此使用setsockopt(SO_BINDTODEVICE)。绑定到0.0.0.0(在Python上为“”)将始终接收计算机在所有接口上接收到的所有UDP数据包,而不考虑目标IP,因此,这通常是Linux上最有用的选项。

Windows:绑定到特定IP将绑定到属于该IP的接口,就像在Linux上setsockopt(SO_BINDTODEVICE)一样。此IP不会过滤传入的UDP数据包,因此即使绑定到特定IP,也可以接收多播流量。(这可能是Windows行为对我而言第一次比Linux行为更为一致。)

Python 并未 将这些特定于操作系统的差异用于套接字(在其他领域也是如此)。只要您没有明确的理由不这样做,我建议始终绑定到0.0.0.0。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号