电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> C++/VC>>VC++中用winsock获得动态IP:

VC++中用winsock获得动态IP

来源:www.cncfan.com | 2006-12-11 | (有3907人读过)

void __fastcall TForm1::FormCreate(TObject *Sender)
{
WSAData wsaData;

if (WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{ //初始化WINSOCK调用

MessageBox(NULL,"Wrong WinSock
Version","Error",MB_OK);
return ;
}

Refresh1Click(Sender); //程序一开始,就调检知IP地址
}

再双击Refresh按钮,在其中加上以下程序

void __fastcall TForm1::Refresh1Click(TObject *Sender)
//刷新IP地址
{
char HostName[80];

LPHOSTENT lpHostEnt;

struct in_addr addr[2];

//本程序假设主机不是多宿主机,即最多只有

// 一块网卡和一个动态IP
for (int i=0; i< 2; i++){
memset(&addr[i],0,sizeof(in_addr));
//对in_addr结构清0,以利后面填写

}

if (gethostname(HostName,sizeof(HostName))==SOCKET_ERROR)

{ // 得到本主机名

MessageBox(NULL,"Can't getting local host name.","Error",MB_OK);
return ;
}

Label3- >Caption=HostName;

lpHostEnt=gethostbyname(HostName);//利用得到的主机名去获得主机结构

if (!lpHostEnt){

MessageBox(NULL,"Yow! Bad host lookup.","Error",MB_OK);

return ;

}

for (int i=0; lpHostEnt- >h_addr_list[i]!=0; i++)

//从主机地址表中得到IP地址

{

memcpy(&addr[i],lpHostEnt- >h_addr_list[i],sizeof(in_addr));

}

Label4- >Caption=inet_ntoa(addr[0]);

Label5- >Caption=inet_ntoa(addr[1]);

}

再双击Refresh按钮,在其中加上以下程序

void __fastcall TForm1::Button2Click(TObject *Sender)

{

WSACleanup(); //释放WINSOCK调用

Close();

}

C++/VC热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2021 电脑爱好者 版权所有 备案号:鲁ICP备09059398号