2013-02-06 97 views
0

編程新手,但試圖自學一些學校至今尚未顯示給我的地方。C#將獲取的地址解析爲IP地址

正在運行的項目的宏偉計劃是接受客戶端與服務器的連接。在控制檯窗口中,它將顯示連接的時間。我也試圖讓它顯示客戶端IP地址爲記錄緣故。以下是我的,但我無法正確解析它。

//Console Output 
string IPAddress = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString(); 
IPAddress address = IPAddress.Parse(ipAddress); 
Console.WriteLine("New TCP connection made at " + "{0:g}", DateTime.Now + IPAddress); 

如果我離開了「ip地址地址......」行,它會顯示長的醜,未解析地址= P

+3

你能不能展示'長而醜陋的,未分析的地址'? :D –

+0

新的TCP連接在2/5/2013 10:55:46 PMfe80 :: c139:f627:29c3:29d1%10 – user1901231

+0

[參考](http://forums.asp.net/t/1574373.aspx/1) – gks

回答

0

你需要看的所有IP地址從地址列出並丟棄IPV6的。

IPAddress[] ipv4Addresses = Array.FindAll(
    Dns.GetHostEntry(string.Empty).AddressList, 
    a => a.AddressFamily == AddressFamily.InterNetwork); 

對於AddressFamily類型,請參見this link

0

我想也讓它顯示客戶端IP地址爲 日誌的緣故。

請記住,客戶端上可能有多個NIC,即有線/無線(以及多於有線NIC)。這意味着將有多個IP地址,並且很可能是IPv4和IPv6地址的混合。

當使用Dns.GetHostEntry方法,傳遞一個空字符串作爲主機名稱將返回本地主機的IPv4地址:

IPHostEntry entry = Dns.GetHostEntry(string.Empty); 

或者,你可以使用:

IPHostEntry entry = Dns.GetHostEntry(Dns.GetHostName()); 

然後,找到所有的地址,使用AddressFamily Enumeration

var addresses = entry.AddressList.Where(x => x.AddressFamily == AddressFamily.InterNetwork); 

其中AddressFamily.InterNetwork = IP版本4的地址。

從這裏,您可以根據需要遍歷addresses

+0

嘗試查看我是否可以使用提供的建議來使用它。對某些東西來說還是很新的東西,所以需要我花一點時間來弄清楚:/ – user1901231