我有以下问题
在客户机系统中,当客户机发送一条消息时,它被附加到一个队列中,以逐个应答消息
现在,如果正在服务的客户机断开连接,您应该阅读并回复下一条消息。问题是,当客户端断开连接时,系统正在等待input
中的文本输入,例如:
Received: Customer Message 1
Reply to client 1:> Message from client2 #If client 1 disconnects
我们期望的是跳过这个input
,这样它就不会等待对已经离开的客户机的响应,这样的结果仍然存在:
Received: Customer Message 1
Reply to customer 1:> # Customer 1 left
Received: Customer Message 2
Reply to client 2:> Message to client 2
服务器.py
import socket
import threading
class Hilo1(threading.Thread):
def __init__(self,Funcion,Funcion2,cliente,direccion):
threading.Thread.__init__(self)
self.Funcion = Funcion
self.Funcion2 = Funcion2
self.Cliente = cliente
self.Direccion = direccion
def run(self):
try:
self.Funcion(self.Cliente,self.Direccion)
except ConnectionResetError:
self.Funcion2(self.Cliente)
class Servidor_C():
def __init__(self):
self.ListaUsuarios = []
self.ListaMensajes = []
self.Escucha()
def EliminarUsuario(self,cliente):
self.ListaUsuarios.remove(cliente)
for elemento in self.ListaMensajes:
if elemento[1] == cliente:
self.ListaMensajes.remove(elemento)
self.LeerMensaje()
def LeerMensaje(self):
while self.ListaMensajes:
for i,mensaje in enumerate(self.ListaMensajes):
print("\n",mensaje[0])
resuesta = input("> ")
print("\n",mensaje[1],"--","nuevo conexion")
mensaje[1].sendall(resuesta.encode())
self.ListaMensajes.remove(self.ListaMensajes[i])
def RecibirMensaje(self,cliente,direccion):
while True:
mensaje = cliente.recv(1024).decode()
self.ListaMensajes.append([mensaje,cliente,direccion])
if len(self.ListaMensajes) == 1:
threading.Thread(target=self.LeerMensaje).start()
def Escucha(self):
servidor = socket.socket()
conexion = ("192.168.8.5",500)
servidor.bind(conexion)
servidor.listen(2)
while True:
cliente,direccion = servidor.accept()
self.ListaUsuarios.append(cliente)
Hilo1(self.RecibirMensaje,self.EliminarUsuario,cliente,direccion).start()
Servidor_C()
客户端.py
import socket
conexion = ("192.168.8.5",500)
cliente = socket.socket()
cliente.connect(conexion)
while True:
linea = input("> ")
cliente.sendall(linea.encode())
respuesta = cliente.recv(1024).decode()
print(respuesta)
cliente.close()
目前没有回答
相关问题 更多 >
编程相关推荐