Winsock实现主机名与IP地址之间的转换

#include <winsock2.h>
#include <stdio.h>
#include <conio.h>
WSADATA wsaData;
bool InitSocket()
{
 WORD wVersionRequested;
 int err;
 
 wVersionRequested = MAKEWORD( 2, 0 );        //询问Winsock 2.0版本
 err = WSAStartup( wVersionRequested, &wsaData ); //加载初始化Windows Sockets DLL
 if ( err != 0 ) {
  printf("没有Windows Socket动态库!\n");
  getch();
  return false;
    }
 if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 ) {
  printf("需要Windows Socket 2!\n");
  getch();
  WSACleanup( );
  return false;
    }
 return true;
}
int main(int argc, char* argv[])
{
  //local variable declaration
// WSADATA wsaData;
 LPHOSTENT lpHostEnt;
 DWORD dwIPAddr;
 LPSTR szIPAddr;
 char buf_DomName[24]=" ";
 char buf_IP[15]=" ";
 if(!InitSocket())
  printf("WinSock start error!");
 else
  printf("program is running:\n");
 printf("DNS resolve test program's ready");
 printf(" (no input equals local machine)........\n");
 printf("\n");
  //start domain name resolve here.
 printf("Please enter the domain name:");
 gets(buf_DomName);
  //perform resolve here.
 lpHostEnt = gethostbyname(buf_DomName);
 if(!lpHostEnt)
 {
  //error occurs!
  printf("Could not get IP address!");
  printf("\n");
 }
 else
 {
  //convert & output
  szIPAddr = inet_ntoa(*(LPIN_ADDR)*(lpHostEnt->h_addr_list));
  printf(szIPAddr);
  printf("\n");
 }
  //start IP resolve here.
 printf("Please enter the IP address:");
 gets(buf_IP);
 dwIPAddr = inet_addr(buf_IP);
 if(dwIPAddr == INADDR_NONE)
  //IP address validation failed!
  printf("Invalid Internet address!\n");
 else
 {
  lpHostEnt = gethostbyaddr((LPSTR)&dwIPAddr,sizeof(dwIPAddr),AF_INET);
  if(!lpHostEnt)
  {
   //error occures!
   printf("Could not get host name!");
   printf("\n");
  }
  else
  {
   //output
   printf(lpHostEnt->h_name);
   printf("\n");
  }
 }

 //shut down the socket
 WSACleanup();
 printf("\n");
 return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值