我使用的代码只允许在4个不同的端口上进行4连接。 此代码正常工作,但当客户端关闭连接时,它无法重新建立连接。连接被拒绝。认为这是因为线程已关闭。怎么解决这个? 我无法更改端口号...
enter code here
来自套接字导入*
BUFF = 25
def服务器(主机,端口):
def response(key):
return 'Server response: ' + key
def handler(clientsock,addr):
while 1:
data = clientsock.recv(BUFF)
if not data: break
print repr(addr) + ' recv:' + repr(data)
clientsock.send(response(data))
print repr(addr) + ' sent:' + repr(response(data))
if "close" == data.rstrip(): break # type 'close' on client console to close connection from the server side
clientsock.close()
print addr, "- closed connection" #log on console
addr = (host, port)
serversock = socket(AF_INET, SOCK_STREAM)
serversock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serversock.bind(addr)
serversock.listen(1)
clientsock, addr = serversock.accept()
handler(clientsock, addr)
如果名称 ==' 主要': 导入线程
HOST = '192.168.0.12'
PORTS = [10001,10002,10003,10004]
threads = []
for port in PORTS:
th = threading.Thread(target=server, args=(HOST, port))
th.start()
threads.append(th)
答案 0 :(得分:0)
我不熟悉Python,但我会试一试。
在您的线程中,您可能需要添加一个循环来接受新连接。 serversock.accept()和调用“handler”将在该循环中。这应该允许客户端在客户端关闭连接时再次连接到服务器。
以下是我怀疑它应该看起来的样子(不包括错误检查,不知道Python):
while 1:
clientsock, addr = serversock.accept()
handler(clientsock,addr);