精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>网络与通讯>>转载:拨号上网IP地址的检知(BCB 实现)

主题:转载:拨号上网IP地址的检知(BCB 实现)
发信人: tsingxiao()
整理人: girlrong(1999-11-10 07:45:36), 站内信件
北京山武川仪控制系统有限公司                  王准


---- 随着INTERNET在世界范围内的迅速普及,上网的人数也越来越多。其中,绝
大多
数人是通过普通电话线拨号上网的。我们知道,每一台上网的计算机,不论是用
何种方
式上网,都被分配了一个或多个独立无二的IP地址。对于拨号上网的用户,一般
是由其
ISP在其每次拨号上网时动态分配一个IP地址,这个地址可能每次都不相同(其原
因主
要是为了充分利用有限资源)。那么,我们能否通过某种方法随时方便地检知自
己上网
时的IP地址呢?答案是肯定的。下面我们就用C++BUILDER编制一个小巧的程序来
实现这
种功能。(注:本程序在局域网中也同样能运行)

---- 首先用BCB的FILE菜单下的New Application创建一个新项目,取名为
IPcheck.bpr。

----

---- 然后,在窗体FORM1上添加五个标签(LABEL)和两个按钮(BUTTON),如图所
示。

---- 接下来,双击窗体的OnCreate事件,在其中加上以下程序:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    WSAData wsaData;
if (WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{   file://初始化WINSOCK调用
        MessageBox(NULL,"Wrong WinSock
Version","Error",MB_OK);
        return ;
    }
Refresh1Click(Sender); file://程序一开始,
就调检知IP地址
}

再双击Refresh按钮,在其中加上以下程序
void __fastcall TForm1::Refresh1Click(TObject *Sender)
file://刷新IP地址
{
    char HostName[80];
    LPHOSTENT lpHostEnt;
struct in_addr addr[2];
file://本程序假设主机不是多宿主机,即最多只有
    // 一块网卡和一个动态IP
    for (int i=0; i< 2; i++){
memset(&addr[i],0,sizeof(in_addr));
file://对in_addr结构清0,以利后
} file://面填写
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++)
file://从主机地址表中得
file://到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();  file://释放WINSOCK调用
    Close();
}


---- 最后,不要忘了在程序头部加上#include< winsock.h>.....哦。

---- 好了,程序完成了,编译后就可运行了。本程序在中文WIN95/NT4.0下编译
通过。

--

  既不能达而兼善天下
                    只好穷而独善自身
  青山处处  斯民如土矣……

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.253.41]

[关闭][返回]