2012-04-03 48 views
0

此代码适用于我的系统而不是服务器请帮我解决这个错误。我不知道什么是错误..获取系统ip代码在服务器中不工作

这是我的部分代码...

private IPAddress getMyCurrentIP() 
{ 
    IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); 

    if (host.AddressList.Length == 1) 
    myCurrentIP = host.AddressList[0].ToString(); 
    else 
    { 
     foreach (IPAddress address in host.AddressList) 
     { 
      if (address.AddressFamily == AddressFamily.InterNetwork) 
      { 
      if (IsLocal(address)) 
      return address; 
     } 
     } 
    } 


    return null; 
} 

    public bool IsLocal(IPAddress address) 
    { 
    if (address == null) 
    throw new ArgumentNullException("address"); 

    byte[] addr = address.GetAddressBytes(); 

    return addr[0] == 10 
    || (addr[0] == 192 && addr[1] == 168) 
    || (addr[0] == 172 && addr[1] >= 16 && addr[1] <= 31); 
    } 

请帮我解决这个错误...

+3

而这段代码被破坏了......怎么样?我的水晶球今天在店里... – 2012-04-03 12:44:58

+0

当列表中只有一个IP时,为什么你不检查AddressFamily和IsLocal。调试是解决这个问题的唯一真正的方法,因为它取决于机器的设置,但是逻辑上似乎存在足够大的差距来驱动总线。 – 2012-04-03 12:55:39

回答

0

我不事给定的代码会编译,因为你永远不会声明myCurrentIP。另外,如果host.AddressList中只有一个项目,您的函数仍然会返回null。 重新写的第一个条件是这样的:

if (host.AddressList.Length == 1) 
{ 
    return host.AddressList[0]; 
} 
else 
{ 
    ... 

这将如果条件满足返回系统的第一和唯一的ip地址。

+0

mycurrentIp作为声明为全局的字符串。上面的代码在我的系统中工作正常。并没有在服务器上工作。请帮我解决这个错误 – FDO 2012-04-03 13:29:35

+0

@FDO你需要提供更多信息。什么不起作用?是否有例外?该函数是否不返回预期的IP地址?你需要具体。没有更多信息,我可以建议的唯一的事情就是检查服务器上的DNS设置。这些可能是您的代码中存在问题的可能原因。 – 2012-04-03 13:47:17