GoodDay and BadDay

jjunda.egloos.com

포토로그



[wince] Network Status 확인 프로그래밍(Programming)


아래 내용 취소.. 네트워크의 상태를 알아오진 못한다.. 아..

//wince 상에서 Network의 상태를 알아내기

내가 테스트하는 보드에는 유/무선이 모두 달려있다..

여러 웹사이트 및 weeg등.. 찾아봤지만.. 원하는 답이 아닌것 같아.. 찾아보던중..

주옥같은 아래와 같은 소스 발견!! http://www.souljin.net/ <-- 이분이 올리신 소스를 참고(?)해서 사용했다..

매우 감사합니다~

아래의 소스를 테스트하던 도중..

유선과 무선은 모두 IF_TYPE_ETHERNET_CSMACD 으로 인식된다.. 즉 같은 놈으로 인식된다는것이다..

pIfRow를 까보면 그안에 device name을 보면 쉽게 확인해볼수 있다..

그래서 본인은 유선을 사용하면 무선을 종료하고 무선을 사용하면 유선을 종료하는 형식으로 작업을 하고 있다..

또한 PPP라는것과 LOOPBACK도 검색이 되었는데.. 무시~

bool CheckNetworkStatus()
{
 DWORD dwSize = 0;
 DWORD dwRetVal = 0;

 int i, j = 0;
 MIB_IFTABLE *pIfTable;
 MIB_IFROW *pIfRow;

 pIfTable = (MIB_IFTABLE *)MALLOC(sizeof(MIB_IFTABLE));
 if(pIfTable == NULL)
 {
  return false;
 }

 dwSize = sizeof(MIB_IFTABLE);
 if(GetIfTable(pIfTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER)
 {
  FREE(pIfTable);
  pIfTable = (MIB_IFTABLE *)MALLOC(dwSize);
  if(pIfTable == NULL)
  {
   return false;
  }
 }
 if((dwRetVal = GetIfTable(pIfTable, &dwSize, 0)) == NO_ERROR)
 {
  if(pIfTable->dwNumEntries > 0)
  {
   pIfRow = (MIB_IFROW *)MALLOC(sizeof(MIB_IFROW));
   if(pIfRow == NULL)
   {
    if(pIfTable != NULL)
    {
     FREE(pIfTable);
     pIfTable = NULL;
    }
    return false;
   }

//   while(true)
   {
    for(i = 0; i< (int)pIfTable->dwNumEntries;i++)
    {
     pIfRow->dwIndex = pIfTable->table[i].dwIndex;
     if((dwRetVal = GetIfEntry(pIfRow)) == NO_ERROR)
     {
      //if(pIfRow->wszName != NULL)
      //for(j=0;j<(int)pIfRow->dwDescrLen;j++)
      if(pIfRow->dwType == IF_TYPE_ETHERNET_CSMACD)
      {
      
       pIfRow->dwSpeed;
       switch(pIfRow->dwOperStatus)
       {
        case IF_OPER_STATUS_NON_OPERATIONAL:
         return false;
        case IF_OPER_STATUS_OPERATIONAL:
         return true;
        case IF_OPER_STATUS_UNREACHABLE:
         return false;
        case IF_OPER_STATUS_DISCONNECTED:
         return false;
        case IF_OPER_STATUS_CONNECTING:
         return false;
        case IF_OPER_STATUS_CONNECTED:
         return true;
        default:
         return false;
       }//switch
      }
     }//if((dwRetVal = GetIfEntry(pIfRow)) == NO_ERROR)
    }//for(i = 0; i< (int)pIfTable->dwNumEntries;i++)
   }//while(true)
  }//if(pIfTable->dwNumEntries > 0)
 }//if((dwRetVal = GetIfTable(pIfTable, &dwSize, 0)) == NO_ERROR)
 return false;
}





메모장

곧 봄이다.. 나른나른..

W 위젯