我正在开发一个项目,我需要使用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
请原谅我的英语。
感谢您的帮助
答案 0 :(得分:0)
我怀疑它不是客户端断开连接,而是当客户端发送"fin"
时。当客户端循环停止时,以及服务器循环停止时。您发布的代码中唯一改变了serveur_lance
的值的是客户发送"fin"
时的内容:
while serveur_lance:
...
if msg_recu == "fin":
serveur_lance = False
所以当有人将fin
键入客户端时,服务器也会获得停止的命令。
您可能希望关闭该特定连接并将其从serveur_lance
列表中删除,而不是更改服务器代码中clients_connectes
的值。