Sockets 共享公共IP地址上的客户端服务器?

Sockets 共享公共IP地址上的客户端服务器?,sockets,networking,tcp,Sockets,Networking,Tcp,我正在编写自己的聊天应用程序,它使用TCP上的服务器-客户机模型。这只是为了自己的学习 当我通过本地网络连接时,没有任何故障。我理解这一点,因为其他本地IP都可以直接使用。示例:192.168.1.28连接到服务器192.168.1.90 然后我试着通过互联网连接 我已通过端口4296将路由器设置为端口转发tcp连接到192.168.1.90上的服务器 然后我查找路由器的公共IP地址。它显示了101.1.1.20 然后,我在另一个朋友的PC上通过另一个连接设置我的客户端。并通过将客户端连接到端口

我正在编写自己的聊天应用程序,它使用TCP上的服务器-客户机模型。这只是为了自己的学习

当我通过本地网络连接时,没有任何故障。我理解这一点,因为其他本地IP都可以直接使用。示例:192.168.1.28连接到服务器192.168.1.90

然后我试着通过互联网连接

我已通过端口4296将路由器设置为端口转发tcp连接到192.168.1.90上的服务器

然后我查找路由器的公共IP地址。它显示了101.1.1.20

然后,我在另一个朋友的PC上通过另一个连接设置我的客户端。并通过将客户端连接到端口4296上的IP:101.1.1.20来执行

它失败了

经过进一步调查,我的路由器的公共IP似乎是一个共享的公共IP。我想这意味着在我的路由器上还有一层


关于这方面的进一步发展有什么建议吗?我被难住了。

您可以尝试类似的方法,它可以告诉您当您连接到其他人时看到的公共IP地址

这可能不足以让您从外部连接(因为有可能配置了阻止所有传入连接的功能),但至少可以让您查看路由器的IP是否与外部世界看到您的方式相同

您可能还想尝试交换端口上的字节顺序,因为这是人们在客户端和/或服务器程序中经常出错的事情,如果您在本地端口的这两个端口上都出错,它将在那里工作,但如果您将端口配置为匹配,则无法通过路由器工作(因此,由于4296==0x10c8,所以当您的路由器配置为4296时,也尝试检查端口0xc810==51216)


同样值得尝试使用telnet而不是您自己的客户端来连接,只是为了看看连接是否成功,因为可能出错的事情更少当您尝试此操作时,可以告诉您是否有任何SYN数据包到达您的服务器端。

嗯。我获得的路由器ip来自我的ip。这是外部世界认为我是什么。但尝试连接到该ip以到达我的服务器不会产生任何效果。我的怀疑是因为公开看到的ip是共享ip?通常是公开可用的ipble IP对于您与ISP的连接是唯一的,因此,如果您的路由器配置为在该端口上传递连接,它将传递SYN数据包。我检查了我的路由器……它声明自己是与whatismyip不同的另一个公共IP。嗯