gpt4 book ai didi

Python套接字: [Errno 99] when binding to ip on local network

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:39 25 4
gpt4 key购买 nike

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

但是,绑定(bind)到 '' 会使接收代码接受来自任何本地接口(interface)的数据包。如果我尝试专门绑定(bind)到发送计算机的 IP 地址(在接收代码中将 HOST = '' 更改为 HOST = '192.168.1.130'),我得到socket.error: [Errno 99] 无法分配请求的地址。没有其他服务正在使用该端口,并且我尝试了不同的端口,但行为没有变化。如何将套接字配置为仅接收来自特定地址的数据包?

最佳答案

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

其次,无法“将我的套接字配置为仅接收来自特定地址的数据包”。作为替代方案,您可以使用 .recvfrom() 返回的地址来忽略您不关心的数据。

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

关于Python套接字: [Errno 99] when binding to ip on local network,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36086986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com