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()