Python套接字:[Errno 99]在本地网络上绑定到ip时
我正在尝试使用python套接字库在本地网络上的两台linux机器之间设置UDP单播。我使用以下代码发送和接收包裹: 发送Python套接字:[Errno 99]在本地网络上绑定到ip时,python,sockets,networking,udp,Python,Sockets,Networking,Udp,我正在尝试使用python套接字库在本地网络上的两台linux机器之间设置UDP单播。我使用以下代码发送和接收包裹: 发送 import socket HOST = '192.168.1.194' # IP of remote machine PORT = 47808 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.sendto('Hello UDP', (HOST, PORT)) s.close() 接收 import soc
import socket
HOST = '192.168.1.194' # IP of remote machine
PORT = 47808
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto('Hello UDP', (HOST, PORT))
s.close()
接收
import socket
HOST = ''
PORT = 47808
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((HOST, PORT))
while True:
try:
data, addr = s.recvfrom(1024)
print 'Received: {0} @ {1}'.format(data, addr)
except KeyboardInterrupt:
break
s.close()
但是,绑定到
”
会使接收代码接受来自任何本地接口的数据包。如果我试图特别绑定到发送机器的IP地址(在接收代码中将HOST='
更改为HOST='192.168.1.130'
),我会得到一个socket.error:[Errno 99]无法分配请求的地址。没有其他服务正在使用该端口,我已经尝试了不同的端口,但行为没有改变。如何将套接字配置为仅接收来自特定地址的数据包?首先,让我们处理您看到的错误.bind()
命名套接字的本地端,而不是远程端。因此,主机部分必须引用本地计算机(例如,'localhost'
,'127.0.0.1
,'192.168.1.194'
,或'
(用于所有本地接口的通配符)。)因此,当您指定运行.bind()
的计算机的非本地地址时,会出现错误
第二,没有办法“将我的套接字配置为只接收来自特定地址的数据包”。或者,您可以使用.recvfrom()
返回的地址忽略不关心的数据
data, addr = s.recvfrom(1024)
if addr != '192.168.1.130':
continue