標籤:
#include <windows.h>
#include <iostream>
#include <winsock.h>
#pragma comment(lib, "ws2_32")
#include <sstream>
#include<string>
using namespace std;
void main()
{
int WSA_return;
WSADATA WSAData;
WSA_return=WSAStartup(0x0101,&WSAData);
/* 結構指標 */
char ch;
HOSTENT *host_entry;
cout<<"如果您已經輸入完畢,請直接關閉退出"<<endl;
/*設定迴圈不斷的讀入*/
do{
char host_name[256];
cout<<"請您輸入要解析的網址:";
cin.getline(host_name,256);
if(WSA_return==0)
{
/* 即要解析的網域名稱或主機名稱 */
host_entry=gethostbyname(host_name);
printf("%s\n", host_name);
if(host_entry!=0)
{
string str1,str2,str3,str4,str5;
int i1=host_entry->h_addr_list[0][0]&0x00ff,
i2=host_entry->h_addr_list[0][1]&0x00ff,
i3=host_entry->h_addr_list[0][2]&0x00ff,
i4=host_entry->h_addr_list[0][3]&0x00ff;
stringstream strconvert1,strconvert2,strconvert3,strconvert4;
strconvert1<<i1;//把int型轉換成string類型的資料
strconvert1>>str1;
strconvert2<<i2;
strconvert2>>str2;
strconvert3<<i3;
strconvert3>>str3;
strconvert4<<i4;
strconvert4>>str4;
str5=str1+‘.‘+str2+‘.‘+str3+‘.‘+str4;
cout<<"以字串形式輸出:"<<str5<<endl;
printf("解析IP地址: ");
printf("%d.%d.%d.%d\n",
(host_entry->h_addr_list[0][0]&0x00ff),//得到的id
(host_entry->h_addr_list[0][1]&0x00ff),
(host_entry->h_addr_list[0][2]&0x00ff),
(host_entry->h_addr_list[0][3]&0x00ff));
}
}
}while(ch!=27);
WSACleanup();
}
/*使用Socket的程式在使用Socket之前必須調用WSAStartup函數。
該函數的第一個參數指明程式請求使用的Socket版本,
其中高位位元組指明副版本、低位位元組指明主要版本;
作業系統利用第二個參數返回請求的Socket的版本資訊。
當一個應用程式調用WSAStartup函數時,作業系統根據請求的Socket版本來搜尋相應的Socket庫,
然後綁定找到的Socket庫到該應用程式中。
以後應用程式就可以調用所請求的Socket庫中的其它Socket函數了。
該函數執行成功後返回0*/
網域名稱解析成IP地址C++