Как получить доменное имя с данного IP в MFC (VC ++)? - PullRequest
0 голосов
/ 17 ноября 2010

Как получить доменное имя с данного IP в MFC (VC ++)?Я использую следующий код:

#include "stdafx.h"
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>

// link with ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")


int _tmain(int argc, char **argv)
{

    //-----------------------------------------
    // Declare and initialize variables
    WSADATA wsaData = {0};
    int iResult = 0;

    DWORD dwRetval;

    struct sockaddr_in saGNI;
    char hostname[NI_MAXHOST];
char servInfo[NI_MAXSERV];
u_short port = 27015;


// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
    printf("WSAStartup failed: %d\n", iResult);
    return 1;
}
//-----------------------------------------
// Set up sockaddr_in structure which is passed
// to the getnameinfo function
saGNI.sin_family = AF_INET;
saGNI.sin_addr.s_addr = inet_addr(argv[1]);
saGNI.sin_port = htons(port);

//-----------------------------------------
// Call getnameinfo
dwRetval = getnameinfo((struct sockaddr *) &saGNI,
                       sizeof (struct sockaddr),
                       hostname,
                       NI_MAXHOST, servInfo, NI_MAXSERV, NI_NUMERICSERV);

if (dwRetval != 0) {
    printf("getnameinfo failed with error # %ld\n", WSAGetLastError());
    return 1;
} else {
    printf("getnameinfo returned hostname = %s\n", hostname);
    return 0;
}

} Этот код возвращает мне имя хоста как = 255.255.255.255, а не имя домена.

1 Ответ

0 голосов
/ 17 ноября 2010
int WSAAPI getnameinfo(
  __in   const struct sockaddr FAR *sa,
  __in   socklen_t salen,
  __out  char FAR *host,
  __in   DWORD hostlen,
  __out  char FAR *serv,
  __in   DWORD servlen,
  __in   int flags
);

http://msdn.microsoft.com/en-us/library/ms738532(v=VS.85).aspx

Этот вызов API устарел gethostbyaddr.

...