python套接字服务器地址已在使用中
您好,我正在尝试使用python的“问题没有给出任何解决方案”和“不清楚”关闭 我的示例代码python套接字服务器地址已在使用中,python,sockets,socketserver,Python,Sockets,Socketserver,您好,我正在尝试使用python的“问题没有给出任何解决方案”和“不清楚”关闭 我的示例代码 class MyTCPHandler(SocketServer.BaseRequestHandler): def handle(self): # self.request is the TCP socket connected to the client self.data = self.request.recv(1024).strip()
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
print "{} wrote:".format(self.client_address[0])
print self.data
time.sleep(5)
# just send back the same data, but upper-cased
self.request.sendall(self.data.upper())
print 'done handing request from {0}'.format(self.client_address[0])
if __name__ == '__main':
HOST = socket.gethostname()
PORT = int(sys.argv[1])
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
问题是当重新启动服务器时,它说
socket.error: [Errno 98] Address already in use
查看了server.shutdown()
在SocketServer.TCPServer
中执行的操作
它没有关闭任何套接字,所以我尝试在另一个线程中运行它,通过调用
server.shutdown()
server.server_close()
已尝试将调用顺序更改为shutdown()
和server\u close()
我仍然得到socket.error:[Errno 98]地址已在使用中
我使用curl
命令进行测试
使用
netstat
我可以看到端口处于TIME\u WAIT
state系统始终保持套接字一段时间,您无法使用它。通常,套接字可以使用s.setsockopt(socket.SOL\u socket,socket.SO\u REUSEADDR,1)
(在s.bind()
之前)来解决此问题。是否确实调用了shutdown()
和server\u close()
?这个例子对你有用吗?Thank@furas可能重复我尝试过这样做server=SocketServer.TCPServer((主机,端口),MyTCPHandler,False)server.allow\u reuse\u address=True server.server\u bind()server.server\u activate()
works@ppasler该示例使用0作为端口,它接受任意未使用的端口,我尝试将其更改为固定端口,在这种情况下,我得到的错误地址已经在使用中