IP选择的问题Socket Programming c#

本文关键字:Programming Socket 问题 选择 IP | 更新日期: 2023-09-27 18:01:39

我正在创建一个服务器(基于桌面的),它使用这段代码侦听端口4504

                IPAddress[] AddressAr = null;
                String ServerHostName = "";
                try
                {
                    ServerHostName = Dns.GetHostName();
                    IPHostEntry ipEntry = Dns.GetHostByName(ServerHostName);
                    AddressAr = ipEntry.AddressList;
                }
                catch (Exception) { }
                if (AddressAr == null || AddressAr.Length < 1)
                {
                    return "Unable to get local address ... Error";
                }
                Listener_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                Listener_Socket.Bind(new IPEndPoint(AddressAr[0], Port));
                Listener_Socket.Listen(-1);
                Listener_Socket.BeginAccept(new AsyncCallback(EndAccept), Listener_Socket);
                return ("Listening On " + AddressAr[0].ToString() + ":" + Port + "... OK");

现在的问题是,我想在我的服务器上运行这个,我想要的AddressAr[0]的值是我的服务器的公共IP,但是这个代码片段返回服务器的本地lan地址。

就像我想要AddressAr[0] = "180.123.45.6"的东西[这是我的服务器的公共IP],但有了这个片段,我得到AddressAr[0] = "192.168.2.2"

PS:我正在运行这个服务器作为桌面应用程序,我的试验是在调试模式。

我很感激任何帮助。谢谢你。

IP选择的问题Socket Programming c#

您需要在本地主机上侦听,这将是您的192.168.2.2(这是正确的),然后将外部数据包/流量从您的公共地址转发到您的本地机器。

如果你正在使用,例如,linksys路由器,你可以去NAT/QOS和转发任何传入流量在一个特定的端口,例如4504到你的本地机器地址192.168.2.2

任何标准的家用路由器都会在固件中内置端口转发。

在编程服务器时,您应该始终侦听本地ip "127.0.0.1",并且所有来自外部的连接都重定向到安装服务器的本地ip地址。

来自外部的路由请求应该在你的路由器上处理。基本上就是这样。

您可以简单地监听您的机器的任何IP地址:

listenerSocket.Bind(new IPEndPoint(IPAddress.Any, port));