Python套接字:[Errno 99]绑定到本地n上的ip时

2024-06-16 11:45:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用pythonsockets库在本地网络上的两台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()

接收

^{pr2}$

但是,绑定到''会使接收代码从任何本地接口接受数据包。如果我尝试绑定到发送机器的IP地址(在接收代码中将HOST = ''更改为HOST = '192.168.1.130'),我得到一个socket.error: [Errno 99] Cannot assign requested address。没有其他服务使用该端口,我尝试过不同的端口,但行为没有改变。如何将我的套接字配置为只接收来自特定地址的数据包?在


Tags: 端口代码importip机器hostportlinux
1条回答
网友
1楼 · 发布于 2024-06-16 11:45:35

首先,让我们来处理您看到的错误。.bind()将套接字的本地端命名,而不是远程。所以主机部分必须引用本地计算机(例如,'localhost''127.0.0.1'192.168.1.194',或{}(所有本地接口的通配符)。因此,当您指定一个不是运行.bind()的机器的本地地址时,您会得到一个错误。在

第二,没有办法“配置我的套接字以仅接收来自特定地址的数据包”。作为替代,您可以使用从.recvfrom()返回的地址来忽略您不关心的数据。在

data, addr = s.recvfrom(1024)
if addr != '192.168.1.130':
    continue

相关问题 更多 >