用C++ Builder完成網(wǎng)絡(luò)連接檢測程序
發(fā)表時間:2024-02-21 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在Windows系統(tǒng)中,我們經(jīng)常用Ping.exe來測試網(wǎng)絡(luò)的連通性。 Ping的實現(xiàn)過程很簡單,該命令將引發(fā)IP層發(fā)送一個簡單的IP包,一般是32字節(jié)。而目的方收到這個包后,將源地址和目的地址變換一下,重新發(fā)送這個包即可,當(dāng)然還要加一些超時機制。 其實,我們也可用C++ Builder ...
在Windows系統(tǒng)中,我們經(jīng)常用Ping.exe來測試網(wǎng)絡(luò)的連通性。
Ping的實現(xiàn)過程很簡單,該命令將引發(fā)IP層發(fā)送一個簡單的IP包,一般是32字節(jié)。而目的方收到這個包后,將源地址和目的地址變換一下,重新發(fā)送這個包即可,當(dāng)然還要加一些超時機制。
其實,我們也可用C++ Builder NetMaster中的NMEcho控件來實現(xiàn)網(wǎng)絡(luò)連接檢測功能。
首先定義以下控件:
三個Edit控件:一個用于接收遠程主機的IP地址或域名,一個用于接收用戶設(shè)置的超時機制的時間,一個用于設(shè)置端口號。
兩個RichEdit控件:一個用于給遠程主機發(fā)送信息,一個用于接收來自遠程主機的信息。
兩個CheckBox控件:用于用戶是否自己設(shè)定端口號。
一個Button控件:用于執(zhí)行測試。
一個StatusBar控件:用于顯示應(yīng)用程序的狀態(tài)。
程序?qū)崿F(xiàn)代碼如下:
void __fastcall TForm1::Button1Click(TObject ender)
{ //設(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)端口號
NMEcho1-〉ReportLevel=Status_Basic;
NMEcho1-〉Connect(); //建立連接
RichEdit2-〉Clear ();
for(int i=0;i
//RichEdit1用于給遠程主機發(fā)送信息
RichEdit2-〉Text=RichEdit2-〉Text +NMEcho1-〉Echo(RichEdit1-〉Lines-〉
Strings[i]);
NMEcho1-〉Disconnect ();
}
注意:在調(diào)用NMEcho控件的Connect()方法時,應(yīng)該確保在接收數(shù)據(jù)之前連接已經(jīng)建立。
當(dāng)調(diào)用Connect()方法后,如果用戶輸入的是域地址而不是IP地址,且域名服務(wù)器成功地解析了這個域名,將觸發(fā)控件的OnHostResoved事件,在此事件的處理中,我們將解析成功的消息在狀態(tài)欄中顯示給用戶。具體實現(xiàn)代碼如下:
void __fastcall TForm1::NMEcho1HostResolved(TComponent ender)
{
StatusBar1-〉Panels-〉Items[0]-〉Text="Host Resolved!";
}
如果用戶輸入的遠程主機不正確,將觸發(fā)控件的OnInvalidHost事件,在此事件的處理中,彈出對話框要求用戶重新輸入遠程主機的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)欄中顯示給用戶。具體實現(xiàn)代碼如下:
void __fastcall TForm1::NMEcho1Connect(TObject ender)
{
StatusBar1-〉Panels-〉Items[0]-〉Text="Echo has connected host!";
}
如果在調(diào)用Connect()方法后,在超時時間仍然沒有與服務(wù)器連接,將觸發(fā)控件的OnConnectFailed事件,在此事件的處理中,我們將連接失敗的消息顯示給用戶。具體實現(xiàn)代碼如下:
void __fastcall TForm1::NMEcho1ConnectionFailed(TObject ender)
{
ShowMessage("Connection failed!");
}
除了NMEcho控件可以實現(xiàn)以上功能外,NetMaster的NMDayTime、NMTime這兩個控件也能實現(xiàn)。方法與NMEcho控件一樣,區(qū)別是NMDayTime和NMTime這兩個控件不用首先調(diào)用Connect()方法,它們與服務(wù)器的連接是在使用DayTimeStr、TimeStr屬性時自動進行的.