OSError [错误 99] - python

4 投票
2 回答
14344 浏览
提问于 2025-04-18 07:28

我想运行以下简单的服务器代码:

import socket

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 22331                # Reserve a port
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print('Got connection from', addr)
   c.send('Thank you for connecting')
   c.close() 

但是在执行时出现了以下错误:

OSError: [Errno 99] Cannot assign requested address

为什么操作系统无法将指定的端口与地址绑定呢?

2 个回答

1

试着给这个套接字设置一个叫做 SO_REUSEADDR 的选项:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
1

如果用IP地址能正常工作,但用主机名却不行。

你应该在你的 /etc/hosts 文件里有类似下面的内容,把IP地址和主机名对应起来。

127.0.0.1   localhost
127.0.1.1   your_hostname_here

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

你的 /etc/hostname 文件里的内容也应该和上面的一样。

重启一下电脑,这样你就可以成功用主机名进行ping测试了。

你也可以用 socket.gethostbyname(socket.gethostname()) 来获取IP地址,而不是主机名。

撰写回答