2015-12-21 35 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已安装。 –

相关问题