1. gzyueqian
      18529173453

      用C++ Builder實(shí)現(xiàn)網(wǎng)絡(luò)連接檢測(cè)程序

      更新時(shí)間: 2007-05-22 11:58:57來(lái)源: 粵嵌教育瀏覽量:932


        在Windows系統(tǒng)中,我們經(jīng)常用Ping.exe來(lái)測(cè)試網(wǎng)絡(luò)的連通性。

        Ping的實(shí)現(xiàn)過(guò)程很簡(jiǎn)單,該命令將引發(fā)IP層發(fā)送一個(gè)簡(jiǎn)單的IP包,一般是32字節(jié)。而目的方收到這個(gè)包后,將源地址和目的地址變換一下,重新發(fā)送這個(gè)包即可,當(dāng)然還要加一些超時(shí)機(jī)制。

        其實(shí),我們也可用C++ Builder NetMaster中的NMEcho控件來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)連接檢測(cè)功能。

        首先定義以下控件:

        三個(gè)Edit控件:一個(gè)用于接收遠(yuǎn)程主機(jī)的IP地址或域名,一個(gè)用于接收用戶設(shè)置的超時(shí)機(jī)制的時(shí)間,一個(gè)用于設(shè)置端口號(hào)。

        兩個(gè)RichEdit控件:一個(gè)用于給遠(yuǎn)程主機(jī)發(fā)送信息,一個(gè)用于接收來(lái)自遠(yuǎn)程主機(jī)的信息。

        兩個(gè)CheckBox控件:用于用戶是否自己設(shè)定端口號(hào)。

        一個(gè)Button控件:用于執(zhí)行測(cè)試。

        一個(gè)StatusBar控件:用于顯示應(yīng)用程序的狀態(tài)。

        程序?qū)崿F(xiàn)代碼如下:

        void __fastcall TForm1::Button1Click(TObject Sender)

        { //設(shè)置NMEcho控件的標(biāo)準(zhǔn)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的默認(rèn)端口號(hào)

        NMEcho1-〉ReportLevel=Status_Basic;

         NMEcho1-〉Connect(); //建立連接

         RichEdit2-〉Clear ();

         for(int i=0;i
        //RichEdit1用于給遠(yuǎn)程主機(jī)發(fā)送信息

        RichEdit2-〉Text=RichEdit2-〉Text +NMEcho1-〉Echo(RichEdit1-〉Lines-〉

        Strings[i]);

         NMEcho1-〉Disconnect ();

        }

        注意:在調(diào)用NMEcho控件的Connect()方法時(shí),應(yīng)該確保在接收數(shù)據(jù)之前連接已經(jīng)建立。

        當(dāng)調(diào)用Connect()方法后,如果用戶輸入的是域地址而不是IP地址,且域名服務(wù)器成功地解析了這個(gè)域名,將觸發(fā)控件的OnHostResoved事件,在此事件的處理中,我們將解析成功的消息在狀態(tài)欄中顯示給用戶。具體實(shí)現(xiàn)代碼如下:

        void __fastcall TForm1::NMEcho1HostResolved(TComponent Sender)

        {

         StatusBar1-〉Panels-〉Items[0]-〉Text="Host Resolved!";    

        }


        如果用戶輸入的遠(yuǎn)程主機(jī)不正確,將觸發(fā)控件的OnInvalidHost事件,在此事件的處理中,彈出對(duì)話框要求用戶重新輸入遠(yuǎn)程主機(jī)的IP地址或域名地址,然后試圖與服務(wù)器重建連接。具體代碼如下:

        void __fastcall TForm1::NMEcho1InvalidHost(bool &&Handled)

        {

         AnsiString s;

         if(InputQuery("Invailid host!","Specify a new host:",s))

         {

          NMEcho1-〉Host=s;

          Handled=true;

         }    

        }

        建立連接后,將觸發(fā)控件的OnConnect事件,在此事件的處理中,我們將連接成功的消息在狀態(tài)欄中顯示給用戶。具體實(shí)現(xiàn)代碼如下:

        void __fastcall TForm1::NMEcho1Connect(TObject Sender)

        {

         StatusBar1-〉Panels-〉Items[0]-〉Text="Echo has connected host!";

         }

        如果在調(diào)用Connect()方法后,在超時(shí)時(shí)間仍然沒(méi)有與服務(wù)器連接,將觸發(fā)控件的OnConnectFailed事件,在此事件的處理中,我們將連接失敗的消息顯示給用戶。具體實(shí)現(xiàn)代碼如下:

        void __fastcall TForm1::NMEcho1ConnectionFailed(TObject Sender)

        {

        ShowMessage("Connection failed!");    

        }

        除了NMEcho控件可以實(shí)現(xiàn)以上功能外,NetMaster的NMDayTime、NMTime這兩個(gè)控件也能實(shí)現(xiàn)。方法與NMEcho控件一樣,區(qū)別是NMDayTime和NMTime這兩個(gè)控件不用首先調(diào)用Connect()方法,它們與服務(wù)器的連接是在使用DayTimeStr、TimeStr屬性時(shí)自動(dòng)進(jìn)行的.

      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 欧美人体一区二区视频 | 亚洲欧美日韩偷拍综合一区 | 亚洲精品国产丝袜久久 | 亚洲日韩在线中文字幕一区 | 日本精品久久久久一区二区三区 | 在线视频免播放器a |