2012-04-03 64 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