自己用python2.7写了一个udp服务在windows接受数据正常,放到linux一直接收不到数据,百度了一下,许多网友也遇到过这个问题,但是没有一个确切的解决方案,下面是我的解决方案,记录一下。
import socket,threading, thread, os
host = "0.0.0.0"
port = 9100
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((host, port))
print("udp server start on port:", port)
while True:
#sock.sendto('1', (host,port))
data, addr = sock.recvfrom(1024)
print("Receive data = %s" % data)
解决问题的关键在与host,我起初写的host是127.0.0.1,在windows正常,在linux接收不到数据,主要原因是linux是多网卡的,127.0.0.1对应的网卡ip跟网络调试助手发数据的目标ip不是同一个ip,所以没数据。改成0.0.0.0就是监听任意ip,接受任意ip发过来的数据,或者本地设定的固定ip,发送给这个IP的数据就能接收到,也可以只监听特定的ip,这样子的话,就只有接受该ip发给你的数据了