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

그리고이 코드는 깨졌습니다. 어떻게? 내 수정 구슬이 오늘 가게에 있습니다 ... –

+0

목록에 단 하나의 IP가있는 경우 왜 AddressFamily와 IsLocal을 확인하지 않습니까? 디버그가이 문제를 해결할 수있는 유일한 유일한 방법입니다. 컴퓨터가 설치되어 있는지 여부에 따라 달라 지지만 버스를 운전할만큼 충분히 큰 로직에 간격이있는 것으로 보입니다. –

답변

0

내가하지 것은 주어진 코드는 것 myCurrentIP을 선언하지 않았으므로 컴파일하십시오. 또한 host.AddressList에 항목이 하나만있는 경우에도 함수는 여전히 null을 반환합니다.

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

그 조건이 충족되는 경우 시스템의 최초이자 유일한하여 IPAddress를 반환 : 이 같은 첫 번째 조건을 다시 작성합니다.

+0

mycurrentIp는 전역 선언 문자열입니다. 위 코드는 제 시스템에서 잘 작동합니다. 그리고 서버에서 작동하지 않았다. 이 오류를 해결하는 데 도움을주십시오. – FDO

+0

@FDO 자세한 정보를 제공해야합니다. 작동하지 않는 것은 무엇입니까? 예외가 있습니까? 함수가 예상 된 IPAddress를 반환하지 않습니까? 당신은 구체적이어야합니다. 더 많은 정보가 없으면 내가 제안 할 수있는 것은 서버에서 DNS 설정을 확인하는 것입니다. 그것들은 당신의 코드에서 문제를 일으킬 가능성이있다. –

관련 문제