我想执行以下简单的服务器代码:
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
为什么操作系统无法使用地址绑定指定的端口?
答案 0 :(得分: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())
获取i.p而不是主机名
答案 1 :(得分:1)
尝试将SO_REUSEADDR
选项设置为套接字:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)