如何在MFC(VC++)中从给定IP获取域名?

发布于 2024-10-03 10:28:38 字数 1439 浏览 4 评论 0原文

如何在MFC(VC++)中从给定的IP获取域名? 我使用的代码如下:

#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 而不是域名。

How to get domain name from Given IP in MFC (VC++) ?
The code i am using is as below:

#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;
}

}
This code is returning me hostname as = 255.255.255.255 not the domain name .

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

_失温 2024-10-10 10:28:38
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

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

This API call deprecates gethostbyaddr.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文