无法远程连接到 Python 套接字

Can't remotely connect to Python Socket

我使用 python 套接字和 Tkinter 创建了一个聊天应用程序,它在本地完美运行,但是客户端无法远程连接到服务器(当我输入我的 public 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

远程登录

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 或本地主机上的服务器或从我的本地网络连接时,客户端连接完美,telnet 也可以连接。我 200% 确定我的端口转发正确,因为当我 运行 端口打开扫描时它说端口 (2000) 已打开。

请帮忙! 谢谢- 麦克斯

I'm at home so there's no firewalls running on my network at all.

该评论是解决您的问题所缺少的部分。您实际上并没有像您的问题所暗示的那样从远程连接,而是尝试从本地网络内部连接到路由器的外部可见地址。

某些路由器支持这种设置,而其他路由器不支持。看起来你的路由器不支持它。有关这方面的更多信息,请参阅 NAT hairpinning (or NAT loopback)