我使用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
来测试我的网络,我可以使用手机访问我的电脑。
答案 0 :(得分:3)
因为代码将localhost
主机指定为主机。要允许任何主机访问该端口,您需要将其指定为'0.0.0.0'
或''
。
HOST, PORT = "", 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
答案 1 :(得分:1)
当您说localhost
作为服务器的主机名时,HTTP服务器将仅选择localhost
或127.0.0.1
上的目标请求。当您从手机访问它时,您可能会使用计算机的实际IP地址访问它,该地址不是127.0.0.1
或localhost
。这就是服务器没有接收这些请求的原因。
要指定您要响应此计算机上的所有目标请求,无论用于访问服务器的IP地址或主机名是什么,都可以使用0.0.0.0
作为HOST
HOST, PORT = "0.0.0.0", 9999