我已经使用python套接字和Tkinter创建了一个聊天应用程序,并且在本地都能正常运行,但是客户端无法远程连接到服务器(当我输入公共IP地址作为主机时),我已经完全进行了端口转发我的网络,我知道如何很好地进行端口转发,当我运行在线端口打开扫描程序时,如果检查端口是否打开,则表明该端口已打开!?
我已经在多个端口上将路由器端口转发,并相应地更新了客户端和服务器,但是客户端和telnet仍然无法连接。.我还禁用了所有Windows防火墙,也禁用了所有路由器防火墙。
这是一个非常简单的套接字客户端和服务器模型,我正在尝试使用它解决问题。
服务器
import socket
s = socket.socket()
host='0.0.0.0'
port = 2000
s.bind((host,port))
s.listen(5)
while True:
c, addr = s.accept()
print ("Got a connection from: ", addr)
c.send(bytes("Thanks for connecting",'utf8'))
c.close()
客户
import socket
s = socket.socket()
port = 2000
s.connect(("109.156.114.183", port))
print (s.recv(1024))
s.close
Telnet
C:\Users\Maks>telnet 109.156.114.183 2000
Connecting To 109.156.114.183...Could not open connection to the host, on port 2000: Connect failed
当我尝试连接到127.0.0.1或localhost上的服务器或从我的本地网络内连接时,客户端可以完美连接,并且telnet也可以连接。我200%确信我已正确转发了端口,因为当我运行端口打开扫描时,它说端口(2000)已打开。
请帮助! 谢谢- 马克
答案 0 :(得分:0)
我在家里,所以我的网络上根本没有防火墙在运行。
该评论是解决您的问题所缺少的部分。实际上,您并非像问题所暗示的那样从远程连接,而是尝试从本地网络内部连接到路由器的外部可见地址。
某些路由器支持这种设置,而其他路由器则不支持。您的路由器似乎不支持它。有关更多信息,请参见NAT hairpinning (or NAT loopback)。