AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

用VC++ 6.0制作网络自动测试程序

51自学网 2015-08-30 http://www.wanshiok.com

  由MICROSOFT公司开发的WINDOWS SOCKETS提供了WINDOWS环境下网络通讯的编程接口。在VC++6.0中,可以通过调用WINDOWS SOCKETS函数,采用原始套接字(RAW SOCKETS)类型和互连网控制消息协议(ICMP),来编制一个能实现PING功能的函数。通过定时调用该函数,就可实现网络的自动测试。若再加上语音报警功能,就是一个很实用的网络测试程序。本文拟介绍实现此功能的程序的制作方法。
  为便于说明起见,我们还是按撚肰C++6.0制作网络测试程序斠晃慕樯艿姆椒ǎ茸鲆桓黾虻サ耐绮馐猿绦颍∟etest)。注意,在制作Netest工程的STEP 4 OF 6时 ,要钩选WINDOWS SOCKETS选项。否则,在下面要编译AUTOP.CPP文件时,将会出错。在Netest工程编译成功后,再做以下几项工作:

一、增加AUTOP. CPP到工程文件中

  在工程à添加工程à文件à将AUTOP.CPP添加到当前工程文件中(AUTOP.CPP的源码见下面第三节的内容所示,应事先将其COPY到当前工程的目录中)。

二、在工程中增加自动测试的有关菜单和函数

(1)在撚肰C++6.0制作网络测试程序斠晃慕樯艿腘etest工程中,其Readinfo()函数的最后一条语句GlobalFree(hHost)释放了装载有初始化信息的内存,当随后调用PING.EXE时,问题不是很大。但若调用WINSOCK函数,内存中的初始化信息会被冲掉。所以须将该语句移到程序结束处再执行。可如下增加OnDestroy()函数:

在ClassWizard中,对应Class name=CNetestView, Object IDs= CNetestView,Message =WM_DESTROY,点击Add FunctionàOnDestroyàEdit Code,增加相应代码如下:

void CNtestView::OnDestroy()

  {

    CFormView::OnDestroy();

    GlobalFree(hHost); //从Readinfo()移到此

    for (int i=0; i<nodeNum; i++)

    DeleteObject(lpHost[i].hrgn);

  }

(2)增加自动测试菜单Autotest:在资源工作区,选中MENUàIDR_MAINFRAMEà点中空的菜单条à属性à令ID=ID_AUTOTEST,标题=Autotest。

  在ClassWizard中,对应Class name=CNetestView,Object IDs=ID_AUTOTEST,Message =COMMAND,点击Add FunctionàOnAutotest àEdit Code,增加相应代码如下:

void CNtestView::OnAutotest()

  {

    SetTimer(1, 30000,NULL); //each 30s interupt 1 time.

    Tc=20;

    CWnd* pParent=GetParent();

    CMenu * pMenu=pParent->GetMenu();

    pMenu->EnableMenuItem(ID_AUTOPING,MF_BYCOMMAND| MF_DISABLED | MF_GRAYED);

    pMenu->EnableMenuItem(ID_STOPAUTO,MF_ENABLED);

    AfxGetMainWnd()->SendMessage (WM_TIMER,0, 0L);

  }

  其中SetTimer()将定时器设为每30秒中断一次。由Tc计算中断次数。余下几句条语句令Autotest菜单变灰,以免多次重入。最后一条语句使得鼠标点击Autotest菜单后,即转到OnTimer()函数开始自动测试。

(3)增加定时测试代码。在ClassWizard中,对应Class name=CNetestView的Message, 选中WM_TIMERàAdd FunctionàEdit Code,在OnTimer() 函数中增加如下代码:

 

void CNetestView::OnTimer(UINT nIDEvent)

  {

    if(Tc++<20) return;

    KillTimer(1);

    Tc=0;

    BOOL bOK=TRUE;

    InvalidateRect(NULL);

    for(int ipT=0;ipT

  {

if(Autotest(lpHost[ipT].nodeIP,3)==FALSE) {

CString strerr;

strerr.Format("err%d.wav",ipT+1);

sndPlaySound(strerr, SND_LOOP |SND_ASYNC );

HDC hdc= CreateDC("DISPLAY",0,0,0);

SelectObject(hdc,lpHost[ipT].hrgn);

InvertRgn(hdc,lpHost[ipT].hrgn);

DeleteDC(hdc);

bOK=FALSE;

  }

else if(bOK) sndPlaySound("Bird0.wav", SND_ASYNC);

  }

SetTimer(1, 30000,NULL);

CFormView::OnTimer(nIDEvent);

  }

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:MFC如何封装WINDOWS应用程序的流程  下一篇:VxD编程入门教程