NoB*_*ugs 4 python sockets udp python-sockets
我正在尝试通过 UDP 联系 A/V 设备。我向本地广播 192.168.0.255 发送一个数据包,它会返回有关设备的信息。我可以验证它是否适用于 Wireshark。但是,我从未在 Python 中得到响应,它只是坐在那里:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #Internet, UDP
s.bind(('', 64000))
#s.sendto('0:0',('192.168.0.255',63630))
s.connect(('192.168.0.255',63630));
s.send('0:0')
#s.listen(1)
data,addr = s.recvfrom(1024)
print data
print 'from', addr
Run Code Online (Sandbox Code Playgroud)
我将其从 64000(随机端口)发送到 63630 端口,因此在发送的 64000 端口上进行绑定和接收,然后发送回该端口,应该可以工作,对吗?我是不是少了一步?
打开SO_BROADCAST发送广播消息的选项:
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
Run Code Online (Sandbox Code Playgroud)
也替换以下
s.connect(('192.168.0.255',63630))
s.send('0:0')
Run Code Online (Sandbox Code Playgroud)
和:
s.sendto('0:0', ('192.168.0.255',63630))
Run Code Online (Sandbox Code Playgroud)
根据 Linuxconnect(2)手册页:
如果套接字 sockfd 是 SOCK_DGRAM 类型,则 addr 是默认发送数据报的地址,也是接收数据报的唯一地址。
根据MSDN -connect (Windows Sockets):
对于无连接套接字(例如,类型 SOCK_DGRAM),connect 执行的操作只是建立一个默认目标地址,该地址可用于后续的 send/WSASend 和 receive/WSARecv 调用。从指定目标地址以外的地址接收到的任何数据报都将被丢弃。
| 归档时间: |
|
| 查看次数: |
6595 次 |
| 最近记录: |