Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python套接字服务器地址已在使用中_Python_Sockets_Socketserver - Fatal编程技术网

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()

您好,我正在尝试使用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()                      
        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作为端口,它接受任意未使用的端口,我尝试将其更改为固定端口,在这种情况下,我得到的错误地址已经在使用中