2010-06-29 97 views
2

我正在嘗試獲取綁定到receiveSock的IP地址。我怎麼才能得到它。如何從套接字獲得IP地址

QUES 1:

ipEndReceive = new IPEndPoint(IPAddress.Any, receivePort); 
receiveSock = new Socket(AddressFamily.InterNetwork 
         , SocketType.Stream, ProtocolType.Tcp); 

receiveSock.Bind(ipEndReceive); 

當代碼到達綁定函數。發生錯誤

參數無效,錯誤代碼:10022, 消息:一個無效的參數是 供給

QUES 2:

ipEndReceive = new IPEndPoint(IPAddress.Parse("127.0.0.1"), receivePort); 
receiveSock = new Socket(AddressFamily.InterNetwork 
         , SocketType.Stream, ProtocolType.Tcp);     
receiveSock.Bind(ipEndReceive); 

ErrorLog.WritetoErrorlog("\nRemote IP Address : " + ((IPEndPoint)receiveSock.RemoteEndPoint).Address.ToString() 

當我與該IP試。它向我顯示與上面相同的錯誤

+0

@tanascius:謝謝讓我意識到我的錯誤。我現在格式化了它。 – 2010-06-29 08:18:14

+0

thx,閱讀和回答格式良好的問題真的很容易^^ – tanascius 2010-06-29 08:20:24

回答

1

首先,它看起來像是您想要的本地終點。其次,當您指定IPAddress.Any0.0.0.0)時,您明確指出Socket將被綁定到沒有特定的接口。每個IP地址恰好匹配一個接口。

var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
s.Bind(new IPEndPoint(IPAddress.Any, somePort)); 
Trace.WriteLine(s.LocalEndPoint); // should be what you're looking for 

套接字被綁定並將用於接收連接。它沒有RemoteEndPoint。這應該是非常清楚的,因爲Accept方法返回一個新的Socket對象,該對象表示兩個端點(本地/遠程)之間的連接。

注意:這是一個IPv4套接字(AddressFamily.InterNetwork),所以不要試圖將它綁定到其他任何地方。

查看關於MSDN的文檔,您可以瞭解更多關於典型的Winsock編程(因爲Socket類只是一個Winsock包裝器)。

+0

Thx解釋。你能把你的前三條線放在一些燈上嗎?我不確定你想要解釋什麼。 **套接字將被綁定到沒有特定的接口**接口在這裏代表什麼 – 2010-06-29 08:23:08

+0

接口參考網絡堆棧中的特定組件。您的電腦可以通過多種方式連接到互聯網(或本地網絡)。你可以有幾個連接(有線和無線)。每個活動接口表示這樣的連接並具有不同的IP地址。當你輸入'netsh interface ipv4 show addresses'時,你會得到所有當前安裝的網絡接口的列表。一個這樣的接口是具有靜態IP地址「127.0.0.1」的回送接口。當我說沒有特定的接口時,我的意思是可以在任何接口上進行連接。 – 2010-06-30 09:32:23

+0

如果您的計算機是網關或防火牆,您可以通過僅允許在特定接口上進行連接來限制網絡任一側的訪問。儘管如此,我認爲這與網絡分段更相關。 – 2010-06-30 09:37:02