我正在创建一个服务器客户端应用程序。我已经能够连接到同一网络上的应用程序。例如,我可以连接到10.0.0.3
和10.0.0.4
。
现在我一直在尝试连接到我的外部IP并收到:
System.Net.Sockets.SocketException (0x80004005)。无法建立连接,因为目标计算机主动拒绝它。
listen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
write = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
end = new IPEndPoint(IPAddress.Parse(IP), 3212);
write.Connect(end);
这是我的代码或路由器设置的问题吗?或者是你无法连接到自己......但是考虑到我可以连接到127.0.0.1
,这是没有意义的。
答案 0 :(得分:2)
这是一个常见的环回错误,因为路由器在进行Internet NAT重定向时会感到困惑。您的外部IP分配给您的调制解调器/路由器...而不是您的计算机,请记住您的路由器可以在一个外部IP下处理网络内多个设备的流量,然后使用NAT将流量重定向到特定的本地连接设备。一个例子是,您的家庭网络有2台计算机,一台打印机和2台移动设备,所有这些都通过Wi-Fi连接到您的家庭网络,所有这些都将通过DHCP分配本地IP地址,但外部IP所有本地设备的地址都相同,因为外部IP地址已分配给路由器。
连接到本地网络设备时,请始终使用本地IP地址而不是外部IP地址
我想让这个答案尽可能简单,但斯科特的评论让我重新认为添加可以帮助社区的细节总是有用的。
基本上,您实际上可以设置端口转发,允许您的路由器将特定端口中接收的传入流量重定向到本地网络中的指定设备。这将使您的设备可以从该网络外部的特定端口访问,您可以使用外部IP地址轻松利用此功能从本地网络内部连接到套接字。另一方面,并非所有路由器/调制解调器都支持端口转发,因此您必须参考调制解调器的手册并检查它是否受支持。
但是,如果您只是因为想要使用外部IP从本地网络连接设备而进行设置,我建议您不要这样做并使用内部IP地址,不要我们真的想要解决将本地设备暴露在互联网上的安全风险。您可以轻松地为外部人员设置严格的防火墙规则,并在本地网络中实现更轻松的安全性。
答案 1 :(得分:0)
对于我的套接字应用程序,我使用了10000的端口号,其次我在套接字服务器计算机上创建了Windows防火墙规则,它允许外部客户端连接到套接字服务器。您可以指定单个IP地址的编号或端口号为10000的范围。从开始 - >所有程序 - >高级安全Windows防火墙。按照提示为您的客户端IP设置规则。祝你好运
答案 2 :(得分:0)
我认为您要连接的IP地址不是 127.0.0.1
,而是您在互联网上使用的自己的IP地址(例如80.110.140.30
)?你不能这样做。例如,尝试在浏览器中复制并粘贴相同的IP地址,您将看到它无法连接或重定向到您的路由器。
在您自己的网络中,连接自己的唯一方法是通过环回设备(localhost
或127.0.0.1
)。