为什么我无法访问局域网中的SockectServer,而我可以在自己的计算机上访问?

时间:2014-12-20 14:11:29

标签: python websocket server socketserver

我使用python' SocketServer模块构建套接字服务器:

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

我可以在我的计算机中使用http://localhost:9999/访问服务器,但我无法通过手机访问(我的手机在局域网中,因为我将计算机上的wifi连接起来。),IP:http://192.168.123.1:9999

我使用python -m SimpleHTTPServer 9999来测试我的网络,我可以使用手机访问我的电脑。

2 个答案:

答案 0 :(得分:3)

因为代码将localhost主机指定为主机。要允许任何主机访问该端口,您需要将其指定为'0.0.0.0'''

HOST, PORT = "", 9999

server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

server.serve_forever()

答案 1 :(得分:1)

当您说localhost作为服务器的主机名时,HTTP服务器将仅选择localhost127.0.0.1上的目标请求。当您从手机访问它时,您可能会使用计算机的实际IP地址访问它,该地址不是127.0.0.1localhost。这就是服务器没有接收这些请求的原因。

要指定您要响应此计算机上的所有目标请求,无论用于访问服务器的IP地址或主机名是什么,都可以使用0.0.0.0作为HOST

HOST, PORT = "0.0.0.0", 9999