socket servidor real libreria funciones español crear con comandos cliente python sockets python-2.7 echo-server

servidor - socket python 3



Cómo hacer un servidor de socket multiproceso simple en Python que recuerda a los clientes (1)

¿Cómo puedo crear un servidor de eco Python simple que recuerda a los clientes y no crea un nuevo socket para cada solicitud? Debe ser capaz de admitir el acceso simultáneo. Deseo poder conectar una vez y enviar y recibir datos continuamente usando este cliente o similar:

import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = raw_input("Server hostname or ip? ") port = input("Server port? ") sock.connect((host,port)) while True: data = raw_input("message: ") sock.send(data) print "response: ", sock.recv(1024)

Es decir, con el servidor ejecutándose en el puerto 50000, utilizando el cliente anterior, quiero poder hacer esto:

me@mine:~$ client.py Server hostname or ip? localhost Server Port? 50000 message: testa response: testa message: testb response: testb message: testc response: testc


Puede usar un hilo por cliente para evitar el bloqueo client.recv() luego usar el hilo principal solo para escuchar a los nuevos clientes. Cuando uno se conecta, el hilo principal crea un nuevo hilo que solo escucha al nuevo cliente y termina cuando no habla durante 60 segundos.

import socket import threading class ThreadedServer(object): def __init__(self, host, port): self.host = host self.port = port self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind((self.host, self.port)) def listen(self): self.sock.listen(5) while True: client, address = self.sock.accept() client.settimeout(60) threading.Thread(target = self.listenToClient,args = (client,address)).start() def listenToClient(self, client, address): size = 1024 while True: try: data = client.recv(size) if data: # Set the response to echo back the recieved data response = data client.send(response) else: raise error(''Client disconnected'') except: client.close() return False if __name__ == "__main__": while True: port_num = input("Port? ") try: port_num = int(port_num) break except ValueError: pass ThreadedServer('''',port_num).listen()

Los clientes pierden el tiempo después de 60 segundos de inactividad y deben volver a conectarse. Vea la línea client.settimeout(60) en la función ThreadedServer.listen()