VC升级VS2013 关于gethostbyname的问题

xiaodeerdeer 2015-09-14 12:48:01
warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API

源代码如下

a.sock = socket( AF_INET, SOCK_STREAM, 0);
if (a.sock == INVALID_SOCKET) {
return -1;
}
else {
b.sin_family = AF_INET;
if ((phe = gethostbyname(PIPAddr)) == NULL) {
return -2;
}
else {
memcpy((char FAR *)&(b.sin_addr), phe->h_addr, phe->h_length);
。。。
如何将gethostbyname换成getaddrinfo或者是GetAddrInfoW,最好把代码贴出来,还请各位大神帮忙解决,小弟在此感激不尽。
...全文
1026 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30009861 2015-12-30
  • 打赏
  • 举报
回复
http://jingyan.baidu.com/article/1709ad8097e5904634c4f03e.html
xiaodeerdeer 2015-09-14
  • 打赏
  • 举报
回复
感谢两位的回复,我想再不改原来的逻辑基础上进行修改 只是想把gethostbyname换掉,但是不知道怎么改,还请两位帮忙解决一下 谢谢
oyljerry 2015-09-14
  • 打赏
  • 举报
回复

int _tmain(int argc, _TCHAR* argv[])

{

     //-----------------------------------------

     // Declare and initialize variables

     WSADATA wsaData;

     int iResult;

 

     DWORD dwRetval;

 

     int i = 1;

 

     char *port = "633224";

 

     struct addrinfo *result = NULL;

     struct addrinfo *ptr = NULL;

     struct addrinfo hints;

 

 

     // Validate the parameters

     if (argc != 2) {

         printf("usage: %s <hostname>/n", argv[0]);

         printf("  getaddrinfo provides protocol-independent translation/n");

         printf(   "   from an ANSI host name to an IP address/n");

         printf("      %s www.a3gs.com/n", argv[0]);

         return 1;

     }

     // Initialize Winsock

     iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);

     if (iResult != 0) {

         printf("WSAStartup failed: %d/n", iResult);

         return 1;

     }

 

     //--------------------------------

     // Setup the hints address info structure

     // which is passed to the getaddrinfo() function

     ZeroMemory( &hints, sizeof(hints) );

     hints.ai_family = AF_UNSPEC;

     hints.ai_socktype = SOCK_STREAM;

     hints.ai_protocol = IPPROTO_TCP;

 

 

     //--------------------------------

     // Call getaddrinfo(). If the call succeeds,

     // the result variable will hold a linked list

     // of addrinfo structures containing response

     // information

     dwRetval = getaddrinfo(argv[1], port, &hints, &result);

     if ( dwRetval != 0 ) {

         printf("getaddrinfo failed with error: %d/n", dwRetval);

         WSACleanup();

         return 1;

     }

 

     printf("getaddrinfo returned success/n");

 

     // Retrieve each address and print out the hex bytes

     for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {

 

         printf("getaddrinfo response %d/n", i++);

         printf("/tFlags: 0x%x/n", ptr->ai_flags);

         printf("/tFamily: ");

         switch (ptr->ai_family) {

              case AF_UNSPEC:

                   printf("Unspecified/n");

                   break;

              case AF_INET:

                   printf("AF_INET (IPv4)/n");

                   break;

              case AF_INET6:

                   printf("AF_INET6 (IPv6)/n");

                   break;

              case AF_NETBIOS:

                   printf("AF_NETBIOS (NetBIOS)/n");

                   break;

              default:

                   printf("Other %ld/n", ptr->ai_family);

                   break;

         }

         printf("/tSocket type: ");

         switch (ptr->ai_socktype) {

              case 0:

                   printf("Unspecified/n");

                   break;

              case SOCK_STREAM:

                   printf("SOCK_STREAM (stream)/n");

                   break;

              case SOCK_DGRAM:

                   printf("SOCK_DGRAM (datagram) /n");

                   break;

              case SOCK_RAW:

                   printf("SOCK_RAW (raw) /n");

                   break;

              case SOCK_RDM:

                   printf("SOCK_RDM (reliable message datagram)/n");

                   break;

              case SOCK_SEQPACKET:

                   printf("SOCK_SEQPACKET (pseudo-stream packet)/n");

                   break;

              default:

                   printf("Other %ld/n", ptr->ai_socktype);

                   break;

         }

         printf("/tProtocol: ");

         switch (ptr->ai_protocol) {

              case 0:

                   printf("Unspecified/n");

                   break;

              case IPPROTO_TCP:

                   printf("IPPROTO_TCP (TCP)/n");

                   break;

              case IPPROTO_UDP:

                   printf("IPPROTO_UDP (UDP) /n");

                   break;

              default:

                   printf("Other %ld/n", ptr->ai_protocol);

                   break;

         }

         printf("/tLength of this sockaddr: %d/n", ptr->ai_addrlen);

         printf("/tCanonical name: %s/n", ptr->ai_canonname);

     }

     freeaddrinfo(result);

     WSACleanup();

     return 0;

}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧