#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); /* 結(jié)構(gòu)指針 */ char ch; HOSTENT *host_entry;
cout<<"如果您已經(jīng)輸入完畢,,請直接關(guān)閉退出"<<endl; /*設(shè)置循環(huán)不斷的讀入*/
do{ char host_name[256]; cout<<"請您輸入要解析的網(wǎng)址:"; 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型轉(zhuǎn)換成string類型的數(shù)據(jù) 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之前必須調(diào)用WSAStartup函數(shù),。 該函數(shù)的第一個參數(shù)指明程序請求使用的Socket版本, 其中高位字節(jié)指明副版本、低位字節(jié)指明主版本,; 操作系統(tǒng)利用第二個參數(shù)返回請求的Socket的版本信息。 當(dāng)一個應(yīng)用程序調(diào)用WSAStartup函數(shù)時,操作系統(tǒng)根據(jù)請求的Socket版本來搜索相應(yīng)的Socket庫,, 然后綁定找到的Socket庫到該應(yīng)用程序中。 以后應(yīng)用程序就可以調(diào)用所請求的Socket庫中的其它Socket函數(shù)了,。 該函數(shù)執(zhí)行成功后返回0*/
|