【发布时间】:2020-04-18 16:03:12
【问题描述】:
我查看了许多类似的问题,但我无法弄清楚为什么连接从未建立,它们只是超时。我已经看到一些问题,其中建议防火墙(Windows 防火墙)问题可能会阻止我,但我不太确定,我已经尝试在两台机器上禁用防火墙,但问题仍然存在。还有一些 python 规则允许两台机器上的传入和传出连接。
我检查了我的路由器设置,但我找不到任何提示端口转发被禁用等的信息。
我将其中一台设备放在家庭网络上,另一台放在移动数据热点上,以模拟不同网络上的设备。我已经更换了这些设备。
我使用过wireshark检查数据包,我可以看到数据包离开任一网络但从未被接收到。
client.py
import socket
HOST, PORT = SERVERS-EXTERNAL-IP, 65000 #Tried a variety of ports
data = "Hello very cool message"
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
# Connect to server and send data
sock.connect((HOST, PORT))
sock.sendall(bytes(data + "\n", "utf-8"))
print(f"Sent: {data}")
server.py
import socket
PORT = 65000
HOST = socket.gethostname() #Tried other things like '', ''localhost' etc
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((HOST, PORT))
sock.listen(5)
print("Listening")
c, addr = sock.accept()
print("Accepted")
data = c.recv(1024)
sock.close()
client.py 结果:
Traceback (most recent call last):
File "client.py", line 15, in <module>
sock.connect((HOST, PORT))
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
server.py 结果:
Listening
关于我为什么会遇到这个问题的任何建议?
【问题讨论】:
-
“我找不到任何提示端口转发被禁用” - 这是一个奇怪的信息。端口转发需要在路由器中明确配置。默认情况下没有端口转发。这听起来像您没有配置任何端口转发,但希望它神奇地存在。
-
@SteffenUllrich 其他应用程序如何在没有访问我的路由器设置的情况下通过 Internet 进行通信?例如。我已经设置了一个 SSH 服务器,在此之前我可以在特定端口上进行外部访问,但不需要自己配置任何类型的端口转发。
-
我不清楚你到底做了什么。但是,如果您在 NAT 路由器后面的本地网络中设置了 SSH 服务器,则需要进行端口转发以允许从内部访问。如果你已经在一些外部 VPS 上设置了 SSH 服务器,那么你就不需要端口转发。
标签: python python-3.x sockets client-server