我无法从外部连接到套接字

0 投票
2 回答
2072 浏览
提问于 2025-04-16 00:11

我正在尝试制作一个简单的服务器/客户端程序。

在局域网内,它们运行得很好,但当我尝试从“外部”连接时,系统提示连接被拒绝。我已经关闭了两台机器上的防火墙,但仍然无法连接,而且我还仔细检查了IP地址。

我哪里做错了?

谢谢

杰克

代码:

import socket 
host = '' 
port = 9888 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port))     
s.listen(1) 
conn, adrr = s.accept() 
conn.send("Hello, world!") 
s.close() 

Client: 
import socket 
host = '68.x.x.x'
port = 9888
s = socket.socket(socket.AF_INET, socket_SOCK_STREAM)
s.connect((host,port)) 
print s.recv(200) 
s.close() 

2 个回答

1

你传给 .bind 方法的参数是什么?这很可能是问题的原因。例如,如果你使用的是 192.168.x.y 或者 10.x.y.z 这样的地址,这些地址只是局域网地址,不能通过互联网的路由器进行访问(大多数路由器可以设置将一些进入的数据包转发到特定的局域网地址,通常是根据端口来决定的,但这具体要看路由器的品牌和型号)。

3

你可能遇到了两个问题。

  1. 网络配置出错
  2. 代码中有bug

调试的方法就是先排除一个问题。如果我们能确定代码没有问题,那就说明是网络的问题。

找一个你知道可以正常工作的Socket服务器和客户端,然后把它们当作独立程序来测试,分别在防火墙内外运行。 去这个网站下载示例代码。把客户端和服务器的端口改一下,编译并运行它们。首先在同一台机器上测试,然后在同一网络的两台机器上测试,最后在网络内部运行服务器,而客户端在网络外部运行。

撰写回答