Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字:[Errno 99]在本地网络上绑定到ip时_Python_Sockets_Networking_Udp - Fatal编程技术网

Python套接字:[Errno 99]在本地网络上绑定到ip时

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

我正在尝试使用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 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