C#之獲取本地IP地址


最近協助一個項目解決了一個獲取IP地址的問題,手機客戶端與WebService進行通訊,然后WebService通過TCP通訊把指令傳遞到另一台PC機上。在測試的過程中,總是會出現WebService服務器和PC機通訊失敗的問題,但是用TCP調試工具進行通訊調試這兩台機器是可以進行通訊的,進行調試好了之后,換了另外的網絡環境又通訊不了。最后拿到了代碼,排查出來是IP地址獲取的問題。

原始代碼獲取IP地址是通過Dns.GetHostAddresses(Dns.GetHostName())進行獲取IP地址數組,然后再數組中獲取IP地址的:

原來寫的代碼獲取的是數組中的第三個值,在其中寫死,在測試環境上就已經測試通過,但是換了客戶環境通訊又失敗,無奈用Fildder進行排查,通訊的地址有問題,就排查到IP地址獲取錯誤,通過網上查找資料,獲取IP地址換成:

1 public static IPAddress localip = Dns.GetHostAddresses(Dns.GetHostName())
2       .Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
3       .First();

Dns.GetHostAddresses(Dns.GetHostName())中獲取IP地址為IPV4、IPV6,多塊網卡(包括虛擬網卡)的地址,網絡環境不同,獲取的數據就不一樣,導致獲取本機IP地址出現錯誤。

在對IP地址進行篩選

1 Dns.GetHostAddresses(MachineName)
2      .Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
3      .First()

是篩選ip v4 。

1 Dns.GetHostAddresses(MachineName)
2      .Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
3      .First()

是篩選V6的ip地址。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM