2015-12-21 53 views
1

我正在使用從(server,client)提供的服務器和客戶端套接字通信。當我從同一臺機器上運行這些項目時,一切正常。當我試圖用其它PC作爲客戶端我收到以下異常消息:索引超出了套接字客戶端的數組邊界c#代碼

指數所述陣列的asynchronousClient.StartClient()在管線47中的vounds這實際上是第二線之外:

IPHostEntry ipHostInfo = Dns.GetHostEntry("serverIp"); 
IPAddress ipAddress = ipHostInfo.AddressList[0]; 
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port); 

編輯 IPHostEntry包含其中服務器存儲在PC的名稱。但是ipAdress爲空。

+0

從@傑夫 - 伍茲:下來投票 你踩此代碼在調試器來找出到底什麼是Dns.GetHostEntry回來?看起來非常明顯,那條線上的「索引超出界限」錯誤,您嘗試按索引獲取item [0],意味着數組AddressList沒有元素零。 向我們展示更完整的代碼可能會更有幫助。 –

+2

如果(ipHostInfo.AddressLength.Length == 0)拋出新的異常(「沒有IPv6支持」); –

+0

你想用這段代碼做什麼? GetHostEntry用於解析* names *中的* IP *。如果'serverIp'字符串實際上包含一個IP,那麼這個代碼將返回最多與您提供的IP相同的輸入。 –

回答

2

錯誤發生,因爲ipAdress爲空。最可能的原因是主機名存在(DNS知道該域),但是,不存在A記錄。爲了澄清,A記錄中的A代表地址,並且該記錄用於從名稱中找到連接到互聯網的計算機的地址。

2

Dns.GetHostEntry文檔:如果本地計算機沒有安裝IPv6的

IPv6地址從GetHostEntry方法的結果進行過濾。因此,如果只有IPv6結果可用於hostNameOrAddress.parameter,則可以取回空IPHostEntry實例。

含義,您只能找回IPv6記錄,並且該方法會爲您過濾它們。

+0

因此,爲了不過濾IPv6記錄,我應該怎麼做? –

+0

@JoseRamon如文檔所示,嘗試在您的機器上安裝IPv6支持。 –

+0

IPv6已安裝。 –

相關問題