2

我使用 SocketServer 编写了一个简单的 python 脚本,它在 Windows 上运行良好,但是当我在远程 Linux 机器(Ubuntu)上执行它时,它根本不起作用。脚本如下:

#-*-coding:utf-8-*- 
import SocketServer

class MyHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        data_rcv = self.request.recv(1024).strip()
        print data_rcv

myServer = SocketServer.ThreadingTCPServer(('127.0.0.1', 7777), MyHandler)   
myServer.serve_forever()

我通过SSH将它上传到远程机器,然后python server.py在远程机器上运行命令,并尝试xxx.xxx.xxx.xxx:7777/test用我的浏览器访问,但是远程机器的终端上没有打印任何东西......有什么想法吗?

更新:问题已解决,这是防火墙问题,谢谢大家。

4

3 回答 3

6

您将服务器绑定到127.0.0.1localhost 的 IP 地址。这意味着服务器将只接受来自同一台机器的连接;它不会识别来自另一台机器的那些。

您需要绑定到您的外部 IP 地址,或者绑定到通配符地址(即不要绑定到任何特定的 IP 地址,只绑定一个端口)。尝试:

myServer = SocketServer.ThreadingTCPServer(('0.0.0.0', 7777), MyHandler) 
于 2011-01-01T16:16:44.130 回答
2

您正在绑定到 127.0.0.1:7777,但随后尝试通过服务器外部 IP 访问它(我将使用您的占位符 - xxx.xxx.xxx.xxx)。127.0.0.1:7777 和 xxx.xxx.xxx.xxx:7777 是不同的端口,可以被不同的进程 IIRC 绑定。

如果这不能解决问题,请检查您的防火墙,许多主机设置的防火墙会阻止除您可能使用的少数之外的所有内容

于 2011-01-01T16:15:51.117 回答
0

首先尝试使用 telnet 或 nc,使用您的端口 telnet 到您的公共 ip,看看您得到什么响应。另外,为什么要从浏览器访问 /test ?我在代码中看不到那部分。我希望你已经照顾好了。

于 2011-01-01T16:11:10.207 回答