====== UDP 端口监听 ====== ===== 1. Windows 7 Python2.7 测试 ===== ==== 1.1 多个应用程序(app)绑定同一常规(非组播)IP地址和端口 ==== - 两个程序同时bind同一IP和端口,不报错,先运行的app可以接收数据,后运行的app收不到数据 - 关闭先运行的app,后继运行的app能接受收据 - netstat -an | findstr 8000 可见IP:PORT被监听多次 UDP 192.168.1.80:8000 *:* UDP 192.168.1.80:8000 *:* UDP 192.168.1.80:8000 *:* ==== 1.2 多个应用程序(app)绑定 0.0.0.0 和相同端口 ==== - 结果同上 - netstat -an | findstr 8000 可见IP:PORT被监听多次 UDP 0.0.0.0:8000 *:* UDP 0.0.0.0:8000 *:* UDP 0.0.0.0:8000 *:* ==== 1.3 多个应用程序(app)分别绑定常规IP地址和0.0.0.0的相同端口 ==== - 绑定常规IP地址的app收到数据,绑定0.0.0.0的app收不到 - 关闭绑定常规IP地址的app后,绑定0.0.0.0的app能接受收据 * 推测:绑定指定IP地址比绑定通用(0.0.0.0)地址优先度高 UDP 0.0.0.0:8000 *:* UDP 192.168.1.80:8000 *:* ==== 1.4 多个应用程序(app)绑定同一组播IP地址和端口 ==== - 不能bind组播IP,bind报错,只能设置socket的组播特性,监听0.0.0.0 - 发到指定IP(非组播)的数据,先运行的app可以收到,后运行的收不到 - 发向组播地址(224.0.0.1)的数据,所有app都能收到 - netstat -an | findstr 8000 可见IP:PORT被监听多次 UDP 0.0.0.0:8000 *:* UDP 0.0.0.0:8000 *:* UDP 0.0.0.0:8000 *:* ===== 2. Centos 7 Python2.7 测试 ===== ==== 2.1 多个应用程序(app)绑定同一常规(非组播)IP地址和端口 ==== 与测试1.1完全相反 后运行的可收数据,先运行的不能接收数据,后运行的退出后,先运行的app可以接收数据 ==== 2.2 多个应用程序(app)绑定 0.0.0.0 和相同端口 ==== 同上 ==== 2.3 多个应用程序(app)分别绑定常规IP地址和0.0.0.0的相同端口 ==== 符合1.3的测试 ==== 2.4 多个应用程序(app)绑定同一组播IP地址和端口 ==== - 1. 测试条件与1.4相同(同样绑定0.0.0.0),符合1.4的测试 - 2. 附加测试,Linux 可以绑定组播地址 - 3. 发到组播组的数据,监听组播地址和监听(0.0.0.0)的app都能收到 - 4. 发向指定地址(192.168.1.179)的数据,只有监听(0.0.0.0)的app能收到 [lhs@localhost ~]$ netstat -an | grep 8000 udp 0 0 0.0.0.0:8000 0.0.0.0:* udp 0 0 224.0.0.1:8000 0.0.0.0:* udp 0 0 224.0.0.1:8000 0.0.0.0:*