Error del progtwig del cliente del servidor Python: “OSError: “

Así que estoy estudiando Python del libro Fundamentals of Python de Kenneth Lambert y estoy teniendo problemas con un error de uno de los progtwigs del libro.

Aquí en el capítulo 10 se habla de clientes y servidores. Mi profesor nos pidió que clavees esos progtwigs en Python para ver cómo funcionan. Los primeros progtwigs funcionaron perfectamente, pero en un progtwig recibo un error que parece ser un error de Windows en lugar de uno de Python.

Este es el progtwig en la página 339:

from socket import * from time import ctime from threading import Thread class ClientHandler(Thread): """Handles a client request.""" def __init__(self, client): Thread.__init__(self) self._client = client def run(self): self._client.send(bytes(ctime() + '\nHave a nice day!' , 'ascii')) self._client.close() HOST = "localhost" PORT = 5000 BUFSIZE = 1024 ADDRESS = (HOST, PORT) server = socket(AF_INET, SOCK_STREAM) server.bind(ADDRESS) server.listen(5) # The server now just waits for connections from clients # and hands sockets off to client handlers while True: print('Waiting for connection') client, address = server.accept() print('...connected from:', address) handler = ClientHandler(client) handler.start() 

Cuando ejecuto este progtwig, muestra el mensaje “Esperando conexión” en el Shell. Sin embargo, cuando bash conectarme al progtwig mediante el símbolo del sistema, aparece el siguiente error:

 C:\Python33>python multi-client-server.py Traceback (most recent call last): File "multi-client-server.py", line 30, in  server.bind(ADDRESS) OSError: [WinError 10048] Only one usage of each socket address (protocol/networ k address/port) is normally permitted 

No hemos estudiado mucho esto en clase. Así que me pregunto por qué sucede esto y cómo solucionarlo.

¡Gracias!

Así que, según sus preguntas:

No hemos estudiado mucho esto en clase. Así que me pregunto por qué sucede esto y cómo solucionarlo.

Por qué: está intentando ejecutar el mismo fragmento de código desde dos CMD diferentes en un sistema operativo Windows. Por lo tanto, cuando ejecuta inicialmente el fragmento de código, el servidor comienza a escuchar en el port number 5000 , y luego, cuando ejecuta el mismo fragmento de código desde el segundo CMD, entra en conflicto con el zócalo que ya está utilizando el primero. He probado esto en Windows 8. introduzca la descripción de la imagen aquí

Cómo solucionarlo: Para solucionar este problema, simplemente tiene que usar un número de puerto diferente cuando ejecute el fragmento de código por segunda vez, para que el socket (puerto IP +) no entre en conflicto con el anterior. Simplemente edite su código y coloque PORT = 15200 y guarde este archivo con un nombre diferente (también proporcioné el código a continuación). Ahora intente ejecutar el primer archivo de fragmento de código desde una ventana de CMD y luego ejecute el segundo archivo de fragmento de código que creado ahora desde la segunda ventana de CMD. ¡El problema será resuelto!

Código:

 from socket import * from time import ctime from threading import Thread class ClientHandler(Thread): """Handles a client request.""" def __init__(self, client): Thread.__init__(self) self._client = client def run(self): self._client.send(bytes(ctime() + '\nHave a nice day!' , 'ascii')) self._client.close() HOST = "localhost" PORT = 15200 # Port number was changed here BUFSIZE = 1024 ADDRESS = (HOST, PORT) server = socket(AF_INET, SOCK_STREAM) server.bind(ADDRESS) server.listen(5) # The server now just waits for connections from clients # and hands sockets off to client handlers while True: print('Waiting for connection') client, address = server.accept() print('...connected from:', address) handler = ClientHandler(client) handler.start() 

Si lo prefiere, consulte los problemas básicos de cliente-servidor.