【问题标题】:Get the server name and ip address in C# 2010C# 2010中获取服务器名称和ip地址
【发布时间】:2013-07-31 21:04:51
【问题描述】:

在C# 2010中获取服务器名称和ip地址

我想获取服务器的 IP 地址。以下代码来自:

public static void DoGetHostEntry(string hostname)
{

        IPHostEntry host;

        host = Dns.GetHostEntry(hostname);

        MessageBox.Show("GetHostEntry({0}) returns:"+ hostname);

        foreach (IPAddress ip in host.AddressList)
        {
            MessageBox.Show("    {0}"+ ip.ToString());
        }
}

此代码必须知道服务器计算机的名称。
System.Net.IPAddress 中的 AddressFamily

System.Net.IPAddress i;
string HostName = i.AddressFamily.ToString();

错误------------>使用未分配的局部变量'i'

如何获取服务器计算机的名称?

【问题讨论】:

  • 您需要更新您的问题以更准确地描述您所问的内容(将 cmets 从问题的答案中移出)。
  • 我在您的本地网络上有软件。网络中只有一台服务器。该软件可以安装在许多局域网上。并加以利用。我想在任何位置安装和运行;自动检测本地网络上的服务器计算机。;;;;我没有服务器的IP和计算机名。而且我希望他们得到一个特殊的代码。;;;;服务器是计算机名和IP地址。在客户端计算机上,服务器将识别。并返回 IP 地址或名称。

标签: visual-studio-2010 c#-4.0 ip ip-address


【解决方案1】:

要获取主机名,您可以执行以下操作:

string name = System.Net.Dns.GetHostName();

如果您想要计算机的主机名和(第一个 IPv4)IP,请使用以下内容:

string name = System.Net.Dns.GetHostName();
host = System.Net.Dns.GetHostEntry(name);
System.Net.IPAddress ip = host.AddressList.Where(n => n.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).First();

名称和 ip 将保存本地计算机的信息。

然后服务器可以通过 udp 多播发送 ip,网络上的客户端将加入一个已知的多播地址,该地址不是特定于服务器的。

多播example

【讨论】:

  • 如何获取IP?该名称来自计算机的 IP 地址。我没有 IP,也没有计算机名称服务器。
  • 您想要一台没有 IP 或名称的计算机的名称?
  • 不是。服务器是计算机名称和 IP 地址。在客户端计算机上,服务器将识别。并返回 IP 地址或名称。
  • 如果客户端不知道服务器的名称或地址,如何联系服务器?
  • 世界上有数以百万计的“服务器”,您希望您的客户端在不知道有关服务器的任何信息的情况下神奇地找到“您的服务器”。那肯定是一些特殊的代码!
【解决方案2】:

首先,您需要自己找出错误(未分配的局部变量)并了解它出现的原因(这是非常基本的),然后再寻找一些可以为您完成这项工作的神奇代码。

其次,没有神奇的代码。我不是套接字程序员,但在我看来,在客户端计算机上运行的应用程序中,您需要硬编码服务器的名称。如果您不想这样做,请以这样一种方式进行编程,即只有您的服务器机器将侦听特定端口,而所有客户端机器将侦听不同的端口。因此,局域网中的每台机器都可以枚举可用机器并首次建立/确定客户端服务器连接/关系。除非你正在编写病毒或其他东西,否则这种方法仍然非常难看。

【讨论】:

    【解决方案3】:
        public string[] ServerName()
        {
            string[] strIP = DisplayIPAddresses();
            int CountIP = 0;
            for (int i = 0; i < strIP.Length; i++)
            {
                if (strIP[i] != null)
                    CountIP++;
            }
            string[] name = new string[CountIP];
            for (int i = 0; i < strIP.Length; i++)
            {
                if (strIP[i] != null)
                {
                    try
                    {
                        name[i] = System.Net.Dns.GetHostEntry(strIP[i]).HostName;
                    }
                    catch
                    {
                        continue;
                    }
                }
            }
            return name;
        }
    
    
        public string[] DisplayIPAddresses()
        {
            StringBuilder sb = new StringBuilder();
            // Get a list of all network interfaces (usually one per network card, dialup, and VPN connection)     
            NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
    
            int i = -1;
            string[] s = new string[networkInterfaces.Length];
    
            foreach (NetworkInterface network in networkInterfaces)
            {
                i++;
                if (network.OperationalStatus == OperationalStatus.Up)
                {
                    if (network.NetworkInterfaceType == NetworkInterfaceType.Tunnel) continue;
                    if (network.NetworkInterfaceType == NetworkInterfaceType.Tunnel) continue;
                    //GatewayIPAddressInformationCollection GATE = network.GetIPProperties().GatewayAddresses;
                    // Read the IP configuration for each network   
    
                    IPInterfaceProperties properties = network.GetIPProperties();
                    //discard those who do not have a real gateaway 
                    if (properties.GatewayAddresses.Count > 0)
                    {
                        bool good = false;
                        foreach (GatewayIPAddressInformation gInfo in properties.GatewayAddresses)
                        {
                            //not a true gateaway (VmWare Lan)
                            if (!gInfo.Address.ToString().Equals("0.0.0.0"))
                            {
                                s[i] = gInfo.Address.ToString();
                                good = true;
                                break;
                            }
                        }
                        if (!good)
                        {
                            continue;
                        }
                    }
                    else
                    {
                        continue;
                    }
                }
            }
            return s;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多