繁体   English   中英

IP 选择 Socket 编程问题 C#

[英]Problem with IP selection Socket Programming C#

我正在创建一个服务器(基于桌面),它使用这段代码在端口 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,但是这个片段返回服务器的本地局域网地址。

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

PS:我将此服务器作为桌面应用程序运行,我的试验处于调试模式。

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

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

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

我希望这有帮助。

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

例如,如果您使用的是 linksys 路由器,您可以 go 到 NAT/QOS 并将特定端口(例如 4504)上的任何传入流量转发到您的本地计算机地址192.168.2.2

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

您可以简单地收听您的机器具有的任何 IP 地址:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM