2012-07-19 56 views
0

我對獲取PC的IP地址有點困惑。我有一個winforms應用程序運行在多臺電腦。某些情況下的應用程序必須向其他應用程序發送消息。爲此,我向數據庫寫入關於運行應用程序的pc的信息,其中數據是IP地址。這個想法是使用WCF來通信和廣播消息到正在運行的應用程序。 所以,問題是我怎樣才能得到工作的IP地址。用一個以太網ip地址,一個wi fi地址和一個vmware地址來映像一個筆記本。我必須選擇哪一個?獲取使用的IP

這是我使用的代碼。但是在筆記本的情況下,它正在返回虛擬機的地址,並且它是無用的。

private String GetMyIp() 
{ 
    String ipAddress = 
     System.Net.Dns.GetHostEntry(
     System.Net.Dns.GetHostName()) 
     .AddressList.First(i => i.AddressFamily.Equals(
     System.Net.Sockets.AddressFamily.InterNetwork)) 
     .ToString(); 
    return ipAddress; 
} 

主要想法是獲取具有連接的IP地址。希望清楚。

在此先感謝。

+1

在一行中干擾所有的代碼使得難以閱讀和難以調試(如果不是不可能的話)。 – 2012-07-19 13:17:33

+0

@SteveWellens--也許他正在模仿流利的api! :) – EkoostikMartin 2012-07-19 13:20:03

+1

如果沒有IPv4地址,「First」將失敗,併發生異常。 – spender 2012-07-19 13:24:14

回答

1

那麼除非你連接它的很多工作爲您的計算機來確定哪個卡將使用..或使用。

繼承人我所採取的方式。我做了一個連接,然後問,它用來做什麼的,其實我用你的代碼的一部分,它肯定似乎工作

而且,當然,另一端連接還可以檢查遠程(例如客戶端)的處理以類似的方式..

class Program 
{ 
    static void Main(string[] args) 
    { 
    TcpClient t = new TcpClient("www.microsoft.com", 80); 


    Console.WriteLine(GetMyIp(t.Client.LocalEndPoint.AddressFamily)); 
    t.Close(); 
} 

static private String GetMyIp(AddressFamily addr) 
{ 
    String ipAddress = System.Net.Dns.GetHostEntry(
     System.Net.Dns.GetHostName() 
     ) 
     .AddressList.First(i => i.AddressFamily.Equals(addr)).ToString(); 
    return ipAddress; 
} 

}

+0

非常感謝。它運行良好,但問題是生產環境沒有互聯網連接。 – 2012-07-19 13:37:09

+0

那麼這個例子是「一個」連接,如果你連接到你自己的系統,你會使用*那個連接,而不是你剛剛創建的連接。 – BugFinder 2012-07-19 13:38:05

+0

Yeap。我在想那個 – 2012-07-19 13:43:02

1

有你需要考慮枚舉活動的網絡連接時,幾件事情。如果你有wifi適配器和局域網連接,並且兩者都處於活動狀態,你希望運行的應用程序使用哪一個?

爲什麼不使用中央WCF publish-subsribe方法的良好實踐,讓正在運行的客戶端請求中央WCF服務並可能在WCF服務器端存儲EndPoint地址?

+0

感謝您的評論。這是一個很好的問題。我必須在系統中,我可以使用e中央wcf服務。但在另一個我不能(因爲系統是按照我在問題中描述的方式完成的) – 2012-07-19 13:45:10