当前位置: 首页 > 知识库问答 >
问题:

关闭后重新连接客户端到服务器

梁丘诚
2023-03-14

我使用的代码女巫只允许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)

如果名称==“main”:导入线程

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)

共有1个答案

马德宇
2023-03-14

我不熟悉Python,但我会尝试一下。

在线程中,您可能需要添加一个循环来接受新连接。服务器袜。accept()和调用“handler”将位于该循环中。这应该允许客户端在关闭连接时再次连接到服务器。

以下是我认为它应该是什么样子(不包括错误检查,也不了解Python):

while  1: 
     clientsock, addr = serversock.accept()
     handler(clientsock,addr);
 类似资料:
  • 问题内容: 我有一个RMI服务器和一个桌面RMI客户端。重新启动服务器时,客户端出现错误。是否可以在不重新启动客户端的情况下重新启动RMI连接? [编辑]这是堆栈跟踪: 问题答案: 服务器终止后,您将收到一个ConnectException。之后,您可以使用Naming.lookup获取新的服务器对象。

  • 另一方面:当客户端A断开连接(失去连接)并在超时时间内重新连接,客户端B在断开连接期间使用emit向房间一发送消息时,则客户端A重新连接后的原套接字将立即关闭,传输原因为:关闭且未超时。 它看起来有一些行为选择断开的套接字在超时时间,因为其他一些联机套接字尝试向同一个房间发送消息。当发出的消息无法传递到断开连接的套接字(在客户端)时,可能会选择该套接字在超时重新连接后立即关闭事务。

  • 我正在编写一个简单的客户端/服务器套接字程序,其中客户端与服务器连接并通信,然后它们向服务器发送退出消息,然后服务器关闭连接。代码如下所示。 服务器.py client.py 我想要的是万一服务器通过ctrl-c或任何其他方式退出,我希望关闭所有客户端套接字,并将msg发送给客户端,他们也应该在其上关闭套接字。 我在下面除部分之外的部分做了一些工作,但由于某些原因,客户端没有收到服务器发送的消息。

  • 编辑问题以包含所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 我有一个nodejs客户端,它使用bramqp连接到RabbitMQ服务器。我的客户端可以连接到localhost中的Rabbit MQ服务器,运行良好。但它无法连接到另一台机器上的远程RabbitMQ服务器。我在远程服务器中打开了端口5672,因此我认为问题在于rabbitMQ服务器的配置。我如何解决这

  • socket.io 0.9 node.js 0.10.15 速递3.3.4 即:调用 --服务器端 --客户端

  • 问题内容: 如何关闭客户端的套接字连接? 我在用: socket.io 0.9 node.js 0.10.15 express3.3.4 即:呼叫 -服务器端 - 客户端 如果加载测试页,则需要来自服务器的一些值(getInitData)。 在第一页上,我获取一次数据,在重新加载或第二遍上,我获取两次数据,依此类推。 重新加载页面以及离开页面后,服务器端的连接将自动关闭。 但是在客户端,连接仍然打