UDP Multicast试验

本文探讨了在DTPLink网络通讯层加入UDPMulticast来实现类uPNP的SSDP和Bonjour的mDNS功能的过程。面对家庭网络内部组播通讯的挑战,作者分享了试验过程、遇到的问题及解决策略,并介绍了如何在不同环境下进行组播通讯的实操经验。

最近试着给DTPLink网络通讯层加上UDP Multicast(IP组播)来实现类似uPNP的SSDP和Bonjour的mDNS功能。Multicast本是用来实现网络上属于同一组播组的主机间通讯,可以实现局域网内和因特网上的组播通讯。网上示例代码很多,但我的试验基本没有成功过。在试验过程中发现TP-Link低端家用路由器并不支持组播报文的转播,所以跨因特网的组播基本上是无法验证的。在Amzon EC2的Instance间也尝试了一把,最后发现Amzon EC2的官方文档中也指明了不支持组播。还尝试了局域网内的组播,理论上局域网内的组播是不需要到路由器上转发的,遗憾的是不论怎么尝试都没有成功。。。。百思不得其解。最后我试着用uPNP的"239.255.255.255:1900"地址试了一把,发现能够从开启upnp功能的路由器上得到SSDP协议的信息,同时侦听在该地址上的两个无线设备(一台笔记本+一台Android手机)间能够实现组播通讯,但是并不稳定,接收端有时收不到报文,从这个结果来看,家庭网络内部如果要用上组播技术,要么需要一个功能更高级的路由器(更多钱),要么尝试用uPNP。Multicast(组播或多播)虽然较Broadcast(广播)有技术上的优势,但还是增加网络通讯负担,所以即使家用路由器支持组播转发,在ISP那端也很有可能把组播转发功能给关了。因此组播在实际应用中还是些限制。本次试验的代码来自这里

注意,Android系统为了省电,默认情况是关闭组播通讯的,用multicastsocket编程时要事先通过Wifimanager得到MulticastLock方可操作。

### 配置 VLC 进行 UDP Multicast 播放 #### 服务器端配置 在服务器端,VLC 可以被配置为通过 UDP 协议发送组播流。以下是具体步骤: 1. 打开 VLC 媒体播放器。 2. 在菜单中依次选择 **媒体** -> **串流**[^1]。 3. 在弹出的窗口中点击 **添加**,选择一个视频文件作为源文件。 4. 点击 **串流** 按钮后,进入目标设置界面。 5. 在目标设置界面中,取消勾选“激活转码”,并选择 RTP 或者 UDP 协议[^2]。 6. 如果选择 UDP,则需要在目标地址栏中输入一个有效的组播 IP 地址(如 `239.0.0.1`),以及一个可用的端口号(如 `1234`)。 7. 点击 **添加** 按钮,将目标地址保存。 8. 继续点击 **下一步** **串流** 按钮,开始发送组播流。 #### 客户端配置 客户端可以通过 VLC 接收服务器发送的 UDP 组播流。以下是具体步骤: 1. 打开 VLC 媒体播放器。 2. 在菜单中依次选择 **媒体** -> **打开网络串流**[^2]。 3. 在弹出的窗口中输入组播地址端口,例如:`udp://@239.0.0.1:1234`。 4. 点击 **播放** 按钮,开始接收并播放组播流。 #### 注意事项 - 确保服务器客户端处于同一网段或通过路由器正确配置了跨网段组播支持。 - 如果跨网段测试失败,可能是由于网关未正确配置组播转发功能。 - 服务器需要绑定正确的网络接口,确保组播流从指定的 IP 地址发出,例如 `10.10.10.13`。 ```python # 示例代码:使用 Python 的 socket 库验证 UDP 组播连接 import socket MCAST_GRP = '239.0.0.1' MCAST_PORT = 1234 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('', MCAST_PORT)) mreq = socket.inet_aton(MCAST_GRP) + socket.inet_aton('0.0.0.0') sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) while True: data, addr = sock.recvfrom(1024) print(f"Received data: {data.decode()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值