使用Python打开到外部计算机的套接字

3 投票
2 回答
6372 浏览
提问于 2025-04-17 04:42

我正在用以下代码在我的电脑上打开一个套接字。当我在我的电脑上访问 my_ip:5000 时,程序会有反应。但是,当我用另一台电脑访问时,就没有任何反应。

HOST = 'my_ip'                 # Symbolic name meaning the local host
PORT = 8000              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()

我不确定这是不是防火墙的问题。当我用 manage.py runserver my_ip:8000 启动 Django 的测试服务器时,我可以从另一台电脑连接到这台机器。我不太明白为什么用上面的代码就无法从另一台电脑连接……

2 个回答

2

这段代码看起来是对的,所以你的问题可能出在别的地方(比如防火墙的问题或者“my_ip”的DNS问题)。

9

通过把 HOST 设置为 'my_ip',你可以让你的电脑只听取来自自己电脑的私有 IP 地址。最常见的例子就是 127.0.0.1。如果你想让它接受来自任何地方的请求,可以把 HOST 设置为空字符串 (HOST='')。这样就能监听指定端口上所有的请求。记得在两台机器上使用相同的端口号,比如 5000 或 8000。

另外,要检查一下两台电脑之间是否有防火墙,这可能会阻止它们之间的连接。

为了测试你的电脑是否可以被访问,可以在一个没有私人信息的目录下运行 python -m SimpleHTTPServer,然后从客户端尝试访问这个启动的网页服务器。

撰写回答