【问题标题】:Python Socket Error "Only one usage of each socket address is normally permitted"Python 套接字错误“每个套接字地址通常只允许使用一次”
【发布时间】:2015-05-24 05:50:20
【问题描述】:

我有一个基本的服务器和客户端,当客户端连接时,它会在服务器上打印一条消息,然后在客户端上打印一条消息,说“感谢连接”。但是当我尝试再次运行服务器时(关闭它之后),我得到“错误:每个套接字地址通常只允许使用一次”(不准确)。当我再次更改端口时,它可以工作。

#Server 
import socket               

s = socket.socket()         
host = socket.gethostname() 
port = 12345             
s.bind((host, port))        

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

.

#Client 
import socket               

s = socket.socket()         
host = socket.gethostname() 
port = 12345              

s.connect((host, port))
print s.recv(1024)
s.close  

如果我将服务器的最后两行代码更改为

    break
c.close()

它可以工作,但会关闭服务器。

如何在客户端断开连接后保持服务器正常运行而不必每次都更改端口?

【问题讨论】:

  • 请不要发布对错误的模糊描述,将实际异常和回溯复制并粘贴到您的问题中。

标签: python sockets


【解决方案1】:

你要设置套接字选项SO_REUSEADDR:

示例:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2014-01-16
    • 2014-05-29
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多