Python socket timing out on other computer. TimeoutError: [WinError 10060]
Python socket timing out on other computer. TimeoutError: [WinError 10060]
我正在尝试通过 python 套接字将客户端连接到服务器。客户端在我的电脑上连接成功,但其他网络上的人无法连接。
TimeoutError: [WinError 10060]
连接失败后在客户端。这是我的 python 脚本的代码。
Server.py
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "0.0.0.0"
port = 8000
print (host)
print (port)
serversocket.bind((host, port))
Client.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "##.###.###.###" # server's public ip.
port = 8001
s.connect((host,port))
print("Connected to server.")
s.send(("Client connected").encode())
端口不同,因为如果我的路由器上的本地端口和外部端口不同,我就无法连接;本地存在 8000
和外部存在 8001
。如果客户端在我的电脑上,服务器会显示它正在通过 public ip 连接,因此它正在通过我的路由器。
在我的服务器计算机上执行 nmap -p 8000 -sN -P0 192.168.0.#
,显示端口已使用 http-alt 关闭。在我的 public ip 上执行此操作表明它已使用 vcom-tunnel 打开|过滤,但它几乎在每个端口上都打开|过滤。
我试过的:
- local_port=8000 和 remote_port=8001 的端口转发。外部ip设置为我的public ip,本地ip设置为我的电脑ip; 192.168.0.#
- 在服务器端路由器上使用 DMZ 主机(暴露主机)。
- 在服务器端路由器上分别启用和禁用 UPNP、WAN 阻塞、Ipsec 直通和 PPTP 直通。
- 允许 TCP 端口
8000
,在本地和远程通过服务器端防火墙。
- 允许程序通过 public 上的防火墙以及客户端和服务器上的专用网络。
- 允许 TCP 端口
8001
,在本地和远程通过客户端防火墙。
- 在 client.py
上与 socket.bind((client_ip,port))
绑定客户端 ip
这可能是我使用的与 http-alt
/vcom-tunnel
有关的端口,而不是与 upnp 相关的端口。
问题是将我端口上的外部 ip 转发到我的 public ip。它设置的 ip 是什么,它只是扫描我的 ip,这让只有我的电脑能够连接到它。我将外部 ip 设置为 0.0.0.0
,使端口对所有 ip 开放。
我正在尝试通过 python 套接字将客户端连接到服务器。客户端在我的电脑上连接成功,但其他网络上的人无法连接。
TimeoutError: [WinError 10060]
连接失败后在客户端。这是我的 python 脚本的代码。
Server.py
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "0.0.0.0"
port = 8000
print (host)
print (port)
serversocket.bind((host, port))
Client.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "##.###.###.###" # server's public ip.
port = 8001
s.connect((host,port))
print("Connected to server.")
s.send(("Client connected").encode())
端口不同,因为如果我的路由器上的本地端口和外部端口不同,我就无法连接;本地存在 8000
和外部存在 8001
。如果客户端在我的电脑上,服务器会显示它正在通过 public ip 连接,因此它正在通过我的路由器。
在我的服务器计算机上执行 nmap -p 8000 -sN -P0 192.168.0.#
,显示端口已使用 http-alt 关闭。在我的 public ip 上执行此操作表明它已使用 vcom-tunnel 打开|过滤,但它几乎在每个端口上都打开|过滤。
我试过的:
- local_port=8000 和 remote_port=8001 的端口转发。外部ip设置为我的public ip,本地ip设置为我的电脑ip; 192.168.0.#
- 在服务器端路由器上使用 DMZ 主机(暴露主机)。
- 在服务器端路由器上分别启用和禁用 UPNP、WAN 阻塞、Ipsec 直通和 PPTP 直通。
- 允许 TCP 端口
8000
,在本地和远程通过服务器端防火墙。 - 允许程序通过 public 上的防火墙以及客户端和服务器上的专用网络。
- 允许 TCP 端口
8001
,在本地和远程通过客户端防火墙。 - 在 client.py 上与
socket.bind((client_ip,port))
绑定客户端 ip
这可能是我使用的与 http-alt
/vcom-tunnel
有关的端口,而不是与 upnp 相关的端口。
问题是将我端口上的外部 ip 转发到我的 public ip。它设置的 ip 是什么,它只是扫描我的 ip,这让只有我的电脑能够连接到它。我将外部 ip 设置为 0.0.0.0
,使端口对所有 ip 开放。