.NET套接字或端口转发问题?

.NET套接字或端口转发问题?,.net,sockets,portforwarding,.net,Sockets,Portforwarding,我现在正在编写的应用程序有这个问题 我正在使用Sockets.NET编写服务器和客户端应用程序。服务器在静态IP为192.168.1.6的机器上运行。客户端通过LAN连接到该IP地址没有问题。但是,当我设置客户端以连接到我的WAN IP时,无法进行连接 当然,我马上想到了端口转发,所以我将路由器配置为在我用于应用程序和机器静态IP的端口上接受传入连接。我甚至通过portforward.com使用PFPortChecker工具检查了端口是否正确转发(确实如此),但我似乎无法让它正常工作 这里有我忽

我现在正在编写的应用程序有这个问题

我正在使用Sockets.NET编写服务器和客户端应用程序。服务器在静态IP为192.168.1.6的机器上运行。客户端通过LAN连接到该IP地址没有问题。但是,当我设置客户端以连接到我的WAN IP时,无法进行连接

当然,我马上想到了端口转发,所以我将路由器配置为在我用于应用程序和机器静态IP的端口上接受传入连接。我甚至通过portforward.com使用PFPortChecker工具检查了端口是否正确转发(确实如此),但我似乎无法让它正常工作

这里有我忽略的东西吗? 我真的希望有人能帮我,因为我现在真的在拔我最后的头发

编辑:

好的,我已将问题缩小到.NET套接字问题。
基本上,当我尝试连接以下代码(C#)时:

只能在LAN环境中进行连接。 然而,当我的机器上运行一个服务器实例,并且我尝试使用PFPortChecker工具ping WAN IP和端口时,我实际上在我的服务器中得到一个响应,它开始作为一个新的客户端处理传入的连接

你知道如何修复我的代码以便通过广域网建立连接吗

编辑2:

好的,我知道问题出在哪里了。我无法从自己的WAN IP连接到自己的WAN IP。在另一个网络上,我没有问题连接到我的服务器


无论如何,谢谢你的麻烦。

我首先建议在服务器上运行Wireshark,看看他是否看到了传入的连接。这将确认路由器是否正在将该端口上的流量转发到计算机

我首先建议在服务器上运行Wireshark,看看他是否看到了传入的连接。这将确认路由器是否正在将该端口上的流量转发到计算机

192.168.1.6是一个局域网子网。。。您的外部IP不同。如果端口转发没有问题,这可能就是问题所在。谷歌“什么是我的ip”,它应该告诉你你的外部ip地址

192.168.1.6是一个局域网子网。。。您的外部IP不同。如果端口转发没有问题,这可能就是问题所在。谷歌“what's my ip”,它会告诉你你的外部ip地址,在客户端上运行Wireshark检查请求是否发送到WAN地址也不会有什么坏处。我运行了Wireshark,使用了过滤器tcp.port==XXXX(其中XXXX是我使用的端口),但什么都没有出现。我曾经在某个地方读到,应用程序无法连接到自己的WAN地址。这是真的,还是我没有收到包裹的另一个原因?编辑:在客户机上启动wireshark,让我们看看这是否给了我什么可以处理的…你是在同一台机器上尝试这样做的吗?这使它更加混乱,但并非不可能。如果您的公共IP是1.2.3.4,并且您尝试连接到1.2.3.4,那么数据包应该会出去,点击WAN端的路由器,然后路由器会将其返回到192.168.1.6否,此时我正在使用PC运行服务器,使用笔记本电脑运行客户端。工作原理与我在同一台电脑上调试两个应用程序时一样。编辑:好的,至少wireshark告诉我客户端正在将包发送到我的WAN IP。我想这就留下了接收包裹的问题。奇怪的是,因为在我看来,这是一个端口转发问题,PFPTCRECKER工具告诉我它可以ping WAN IP并请求端口。我知道我不是在C++编程,而是在C语言编程,但是这是我现在遇到的问题的原因吗?如果是这样,我如何将此解决方案应用于c#(我指的是htonl(INADDR#U ANY);部分)?也可以在客户端上运行Wireshark,以检查请求是否发送到WAN地址。我使用过滤器tcp.port==XXXX(其中XXXX是我使用的端口)运行Wireshark,但没有出现任何问题。我曾经在某个地方读到,应用程序无法连接到自己的WAN地址。这是真的,还是我没有收到包裹的另一个原因?编辑:在客户机上启动wireshark,让我们看看这是否给了我什么可以处理的…你是在同一台机器上尝试这样做的吗?这使它更加混乱,但并非不可能。如果您的公共IP是1.2.3.4,并且您尝试连接到1.2.3.4,那么数据包应该会出去,点击WAN端的路由器,然后路由器会将其返回到192.168.1.6否,此时我正在使用PC运行服务器,使用笔记本电脑运行客户端。工作原理与我在同一台电脑上调试两个应用程序时一样。编辑:好的,至少wireshark告诉我客户端正在将包发送到我的WAN IP。我想这就留下了接收包裹的问题。奇怪的是,因为在我看来,这是一个端口转发问题,PFPTCRECKER工具告诉我它可以ping WAN IP并请求端口。我知道我不是在C++编程,而是在C语言编程,但是这是我现在遇到的问题的原因吗?如果是这样的话,我如何将这个解决方案应用到c#(我指的是htonl(INADDR#ANY);part)?不要成为一个傻瓜或什么的,但是那些不知道LAN IP和WAN IP之间区别的人不应该干预套接字编程。不要成为傻瓜或什么的,但是那些不知道局域网IP和广域网IP的区别的人不应该干预套接字编程。
Socket _client;

_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_client.Connect("XX.XXX.XXX.X", XXXX);