4

質問: WSAAddressToString関数を使用してコンピューターの IP アドレスを取得しようとしています。彼らの Web サイトで msdn のドキュメントを調べましたが、構造内に構造が多すぎて、そこが間違っていると感じています。コードは、 こちらのペーストビン リンクで提供されています。正確にどこが間違っているのか教えてください。

回答: コードに WSAStartup関数を含め、既存のコードにいくつかの変更を加えた後、問題は修正されました。完全なコードはペーストビンにあり、変更されたセクションは以下にあります。

     retval = WSAStartup(MAKEWORD(2, 2), &wsaData);
      if (retval != 0)
      {
          printf("WSAStartup() failed with error code %d\n", WSAGetLastError());
            return 1;
      }
   else
       printf("WSAStartup() is OK...\n");


        size=256;

        lp=pAddresses->FirstUnicastAddress->Address.lpSockaddr;
        size2=pAddresses->FirstUnicastAddress->Address.iSockaddrLength;
        if(WSAAddressToStringA(lp,size2,NULL,op,&size)!= 0)
        {
                    printf("This thing has failed \n");
                    printf("errordetail: %i\n", WSAGetLastError());

                    return 1;
        }
        else
                    printf("\t The ip address is  = %s\n", op);
4

1 に答える 1

6

これを変更してください:

if(WSAAddressToString(lp,size2, NULL,op,&size) != 0) {
    printf("This thing has failed \n");   
    return 1;
} else
    printf("Address string = %s\n", op);
    pAddresses = pAddresses->Next;
}

これに:

long errorcode = WSAAddressToString(lp,size2, NULL,op,&size);
if(errorcode != 0) {
    printf("The error is number: %i\n", errorcode);   
    return 1;
} else
    printf("Address string = %s\n", op);
    pAddresses = pAddresses->Next;
}

次に、印刷された番号を教えてください。

またはhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms681381%28v=vs.85%29.aspxで調べてください

編集:

SOCKADDR_IN6 addrTemp;
addrTemp.sin6_family = AF_INET6;
long errorcode = WSAAddressToString(&addrTemp,size2, NULL,op,&size);
if(errorcode != 0) {
    //printf("The error is number: %i\n", errorcode);   
    printf("errordetail: %i\n", WSAGetLastError());
    return 1;
} else
    printf("Address string = %s\n", op);
    pAddresses = pAddresses->Next;
}
于 2013-06-29T12:49:42.587 に答える