websockets python websocket server socketserver

python - websockets - ¿Por qué no puedo acceder a SockectServer en la red de área local mientras puedo acceder en mi propia computadora?



websocket python javascript (2)

Construyo un servidor de socket con el módulo SocketServer de python:

import SocketServer class MyTCPHandler(SocketServer.BaseRequestHandler): def handle(self): # self.request is the TCP socket connected to the client self.data = self.request.recv(1024).strip() print "{} wrote:".format(self.client_address[0]) print self.data # just send back the same data, but upper-cased self.request.sendall(self.data.upper()) if __name__ == "__main__": HOST, PORT = "localhost", 9999 server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever()

Puedo acceder al servidor con http://localhost:9999/ en mi computadora, pero no puedo acceder con mi teléfono (mi teléfono está en la red de área local porque conecto el wifi desde la computadora) con IP: http://192.168.123.1:9999 .

He utilizado python -m SimpleHTTPServer 9999 para probar mi red, puedo acceder a mi computadora con mi teléfono.


Cuando dice localhost como el nombre de host del servidor, el servidor HTTP seleccionará solo las solicitudes dirigidas a localhost o 127.0.0.1 . Cuando acceda desde su dispositivo móvil, probablemente esté accediendo a él con la dirección IP real de la computadora, que no será 127.0.0.1 o localhost . Es por eso que el servidor no recoge esas solicitudes.

Para especificar que desea responder a todas las solicitudes dirigidas a esta máquina, independientemente de la dirección IP o el nombre de host utilizado para acceder al servidor, utilizaría 0.0.0.0 como HOST

HOST, PORT = "0.0.0.0", 9999


Porque el código está especificando host de host local como un host. Para permitir que cualquier host acceda al puerto, debe especificarlo como ''0.0.0.0'' o '''' .

HOST, PORT = "", 9999 server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever()