python多机网络通信服务端接收不到数据
使用python的网络通信可以很方便地在局域网内传输数据,程序可以分为服务端和客户端
UDP通信
在网上能很容易找到以下程序,在本机测试时没有任何问题,可以通信成功。但是当在局域网内进行多机通信时没有收到数据
服务端程序
import socket
address = ('127.0.0.1', 9999)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(address)
while True:
data, addr = s.recvfrom(1024)
if not data:
break
print('get data from', data.decode('utf-8'))
s.close()
客户端程序
import socket
address = ('127.0.0.1', 10000)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
data = input()
if not data:
break
s.sendto(data.encode('utf-8'), address)
s.close()
测试环境
- 客户端:linux系统
- 服务端:windows系统
- 测试现象:
- 在本地网络测试时可以正常通信,但是多机通信时windows服务端程序不能接收到数据
- windows端使用网络调试助手可以接收到数据
- 原因分析:
- windows的防火墙策略导致无法接收到网络通信的数据
- 在电脑上第一次使用python进行网络通信时,系统通常会弹出一个防火墙的窗口,点击允许后应该就可以正常进行网络通信了
- 但是测试时使用的是anconda的python虚拟环境,好像没有弹出防火墙允许的窗口
- 解决方法
- 打开控制面板->系统和安全->Windows Defender防火墙->允许应用或功能通过Windows Defender防火墙
- 将两个python.exe都勾选上,虚拟环境中的python就可以正常进行网络通信了
|