当客户端断开Python时,保持服务器打开

时间:2017-06-10 22:31:04

标签: python sockets client

我正在开发一个项目,我需要使用socket(python)。我的问题是: - 当客户端断开连接时,我的服务器也会断开连接但我不想要这个。我希望服务器一直保持活着,我该怎么做?

如果我关闭客户端,我希望服务器保持活力

这是我的代码:

客户:

import socket

hote = "localhost"
port = 12800

connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_avec_serveur.connect((hote, port))
print("Established {}".format(port))

msg_a_envoyer = b""
while msg_a_envoyer != b"fin":
    msg_a_envoyer = input("> ")
    msg_a_envoyer = msg_a_envoyer.encode()
    connexion_avec_serveur.send(msg_a_envoyer)
    msg_recu = connexion_avec_serveur.recv(1024)
    print(msg_recu.decode())

print("Close connection")
connexion_avec_serveur.close()

服务器:

import socket
import select

hote = ''
port = 12800

connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_principale.bind((hote, port))
connexion_principale.listen(5)
print("rece {}".format(port))

serveur_lance = True
clients_connectes = []
while serveur_lance:
    connexions_demandees, wlist, xlist = select.select([connexion_principale],
        [], [], 0.05)

    for connexion in connexions_demandees:
        connexion_avec_client, infos_connexion = connexion.accept()
        clients_connectes.append(connexion_avec_client)

    clients_a_lire = []
    try:
        clients_a_lire, wlist, xlist = select.select(clients_connectes,
                [], [], 0.05)
    except select.error:
        pass
    else:
        for client in clients_a_lire:
            msg_recu = client.recv(1024)
            msg_recu = msg_recu.decode()
            print("Recu {}".format(msg_recu))
            client.send(b"5 / 5")
            if msg_recu == "fin":
                serveur_lance = False

请原谅我的英语。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我怀疑它不是客户端断开连接,而是当客户端发送"fin"时。当客户端循环停止时,以及服务器循环停止时。您发布的代码中唯一改变了serveur_lance的值的是客户发送"fin"时的内容:

while serveur_lance:
...
        if msg_recu == "fin":
            serveur_lance = False

所以当有人将fin键入客户端时,服务器也会获得停止的命令。

您可能希望关闭该特定连接并将其从serveur_lance列表中删除,而不是更改服务器代码中clients_connectes的值。