2013-07-31 179 views
-2

獲取C#2010中的服務器名稱和IP地址獲取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()); 
     } 
} 

此代碼必須知道服務器計算機的名稱。
AddressFamily在System.Net.IPAddress

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

錯誤------------->未分配的局部變量的 '我'

如何使用我可以得到服務器計算機的名稱嗎?

+0

您需要更新您的問題以更準確地描述您所問的內容(將問題的答案移至問題的評論)。 – Jake1164

+0

我在你的本地網絡上有軟件。網絡中只有一臺服務器。 該軟件可能安裝在許多局域網上。並利用它。 我想安裝並在任何位置運行;自動檢測本地網絡上的服務器計算機;;;;我沒有服務器的IP和計算機名稱。我希望他們得到一個特殊的代碼。;;;;服務器是計算機名稱和IP地址。在客戶端計算機上,服務器將識別。並返回IP地址或名稱。 –

回答

-1
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; 
    } 
0

要獲取主機的名稱,你可以做到以下幾點:

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

+0

如何獲取IP? 該名稱來自計算機的IP地址。 我沒有IP而沒有計算機名稱服務器。 –

+0

你想要一臺沒有IP或名字的計算機的名字嗎? – Jake1164

+0

不是。服務器是計算機名稱和IP地址。 在客戶端計算機上,服務器將識別。並返回IP地址或名稱。 –

0

首先,你需要找出自己的錯誤(未分配的本地變量),並瞭解它爲什麼會到來(這是非常基本的),然後再尋找一些能爲你完成工作的神奇代碼。

其次,沒有神奇的代碼。我不是套接字編程人員,但在我看來,在客戶端機器上運行的應用程序中,您需要硬編碼服務器的名稱。如果你不想這樣做,編程的方式是隻有你的服務器機器監聽特定的端口,所有的客戶端機器都會監聽不同的端口。因此,局域網中的每臺機器都可以枚舉可用機器並首次建立/確定客戶機服務器連接/關係。而且這種方法仍然非常難看,除非你正在編寫病毒或其他東西。