OSError [错误 99] - python
我想运行以下简单的服务器代码:
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地址,而不是主机名。