利用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-〉Lines-〉Count;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属性时自动进行的。