| 站点地图 | 联系我
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 上善若水 厚德载物
 现在位置 :: 主页 >> 资料中心 >> ROOT / CODE / C/C++ /
 

编写自己的Ping.exe程序 (C++ Builder)

来源(怡园)

From: http://yynets.best.163.com/cbuilder.htm

编写自己的Ping.exe程序 (C++ Builder)


在Windows系统中,我们经常用Ping.exe来测试网络的连通性。

Ping的实现过程很简单,该命令将引发IP层发送一个简单的IP包,一般是32字节。而目的方收到这个包后,将源地址和目的地址变换一下,重新发送这个包即可,当然还要加一些超时机制。

其实,我们也可用C++ Builder NetMaster中的NMEcho控件来实现网络连接检测功能。

首先定义以下控件:

三个Edit控件:一个用于接收远程主机的IP地址或域名,一个用于接收用户设置的超时机制的时间,一个用于设置端口号。

两个RichEdit控件:一个用于给远程主机发送信息,一个用于接收来自远程主机的信息。

两个CheckBox控件:用于用户是否自己设定端口号。

一个Button控件:用于执行测试。

一个StatusBar控件:用于显示应用程序的状态。

程序实现代码如下:

void __fastcall TForm1::Button1Click(TObject Sender) {
    //设置NMEcho控件的标准TCP/IP属性
    NMEcho1->Host=Edit1->Text ;
    NMEcho1->TimeOut=StrToInt(Edit2->Text) ;
    if(CheckBox1->Checked)
        NMEcho1->Port=StrToInt(Edit3->Text);
    else
        NMEcho1->Port=7;    //TCP/IP中Echo的默认端口号

    NMEcho1->ReportLevel=Status_Basic;
    NMEcho1->Connect();     //建立连接

    RichEdit2->Clear ();
    for(int i=0;i
    //RichEdit1用于给远程主机发送信息

    RichEdit2->Text=RichEdit2->Text +NMEcho1->Echo(RichEdit1->Lines->Strings[i]);
    NMEcho1->Disconnect ();
}


注意:在调用NMEcho控件的Connect()方法时,应该确保在接收数据之前连接已经建立。

当调用Connect()方法后,如果用户输入的是域地址而不是IP地址,且域名服务器成功地解析了这个域名,将触发控件的OnHostResoved事件,在此事件的处理中,我们将解析成功的消息在状态栏中显示给用户。具体实现代码如下:
void __fastcall TForm1::NMEcho1HostResolved(TComponent Sender) {
    StatusBar1->Panels->Items[0]->Text="Host Resolved!";
}


如果用户输入的远程主机不正确,将触发控件的OnInvalidHost事件,在此事件的处理中,弹出对话框要求用户重新输入远程主机的IP地址或域名地址,然后试图与服务器重建连接。具体代码如下:

void __fastcall TForm1::NMEcho1InvalidHost(bool &&Handled) {
    AnsiString s;
    if(InputQuery("Invailid host!","Specify a new host:",s)) {
        NMEcho1->Host=s;
        Handled=true;
    }
}


建立连接后,将触发控件的OnConnect事件,在此事件的处理中,我们将连接成功的消息在状态栏中显示给用户。具体实现代码如下:

void __fastcall TForm1::NMEcho1Connect(TObject Sender) {
    StatusBar1->Panels->Items[0]->Text="Echo has connected host!";
}


如果在调用Connect()方法后,在超时时间仍然没有与服务器连接,将触发控件的OnConnectFailed事件,在此事件的处理中,我们将连接失败的消息显示给用户。具体实现代码如下:

void __fastcall TForm1::NMEcho1ConnectionFailed(TObject Sender) {
    ShowMessage("Connection failed!");
}


除了NMEcho控件可以实现以上功能外,NetMaster的NMDayTime、NMTime这两个控件也能实现。方法与NMEcho控件一样,区别是NMDayTime和NMTime这两个控件不用首先调用Connect()方法,它们与服务器的连接是在使用DayTimeStr、TimeStr属性时自动进行的。

Link: http://www.asm32.net/article_details.aspx?id=1895


浏览次数 442 发布时间 2006/8/25 3:18:32 从属分类 C/C++ 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 京ICP备09029108号-1