// PingPlusDlg.cpp : implementation file
//
//////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "PingPlus.h"
#include "PingPlusDlg.h"
#include "PingOptionsDlg.h"
//////////////////////////////////////////////////////////////////////////////
#include "RegKey.h"
#include "SysTCPIP.h"
//////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPingPlusDlg dialog
CPingPlusDlg::CPingPlusDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPingPlusDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPingPlusDlg)
m_Host = _T("");
m_LocalHost = _T("");
m_NameServer = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPingPlusDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPingPlusDlg)
DDX_Control(pDX, IDC_TraceList, m_TraceList);
DDX_Text(pDX, IDC_DEST, m_Host);
DDX_Text(pDX, IDC_LocalHost, m_LocalHost);
DDX_Text(pDX, IDC_NameServer, m_NameServer);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPingPlusDlg, CDialog)
//{{AFX_MSG_MAP(CPingPlusDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDQUIT, OnQuit)
ON_BN_CLICKED(IDC_PingButton, OnPingButton)
ON_BN_CLICKED(IDC_TraceButton, OnTraceButton)
ON_BN_CLICKED(IDC_OptionsButton, OnOptionsButton)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_ClearButton, OnClearButton)
ON_MESSAGE(WSA_PING_ASYNC, OnPINGAsynch)
ON_BN_CLICKED(IDC_Stop, OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPingPlusDlg message handlers
//////////////////////////////////////////////////////////////////////////
// //
// MESSAGE INTERRUPT PROCESSORS //
// //
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////
// //
// Initialize main dialog //
// //
//////////////////////////////////////////
BOOL CPingPlusDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
SetIcon(m_hIcon, TRUE); // 设置最大图标
SetIcon(m_hIcon, FALSE); // 设置最小图标
PingSocket.icmpSocket = INVALID_SOCKET;
PingSent = FALSE;
FetchWinsockSettings(); // 获取信息,如域名,服务名等
if (!InitSockets()) // 如果无法打开socket退出
CDialog::OnCancel();
InitImageList(); // 为IDC_TraceList (aka m_TraceList)建立图像列表
pIcmpBuffer = (LPSTR)icmpBuffer;// 设置缓冲器指向
return TRUE;
}
//////////////////////////////////////////////////
// //
// Control menu and max/min processor //
// //
//////////////////////////////////////////////////
void CPingPlusDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
//////////////////////////////////////////
// //
// Repaint window //
// //
//////////////////////////////////////////
void CPingPlusDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 设计面板
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// 图标在客户机中长方形居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 拉动图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//////////////////////////////////////////
// //
// Called when icon is moving //
// //
//////////////////////////////////////////
HCURSOR CPingPlusDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
//////////////////////////////////////////////////////
// //
// PING Asynchronous Message Processor //
// //
// Responds to received ICMP messages //
// Updates the Trace window with the round //
// trip time and sequence, //
// Stops the timer, //
// If not TRACING, exits. //
// //
// If rcvSockAddr = TraceTarget, displays //
// host reached and exits. //
// If icmpMaxHops exceeded, displays host not //
// reached and exits. (icmpMaxHops is set //
// in PingPlus Options Dialog). //
// Displays next animated icon picture, //
// increments icmpHops and requests next //
// PING //
// //
//////////////////////////////////////////////////////
LRESULT CPingPlusDlg::OnPINGAsynch(WPARAM wParam, LPARAM lParam)
{//异步线程处理器。多线程显示消息
int WSAEvent = WSAGETSELECTEVENT(lParam);
int WSAError = WSAGETSELECTERROR(lParam);
if (WSAError)
{
CString ErrorMessage;
ErrorMessage.Format("WSAAsynch Event # %u, Error: %u",
WSAEvent,
WSAError);
MessageBox (ErrorMessage,
"CPingPlusDlg::OnPINGAsynch",
MB_OK|MB_SYSTEMMODAL);
}
StopTimer();
switch (WSAEvent)
{
case FD_READ:
if (PingSocket.Receive(pIcmpBuffer, sizeof icmpBuffer) == SOCKET_ERROR)
{
if (!PingSent)
return 0;
PingSocket.DisplayError ("FD_READ",
"CPingPlusDlg::OnWSAAsynch");
}
else
{
DWORD PingRoundTrip = PingSocket.icmpPingReceivedAt - PingSocket.icmpPingSentAt;
if (PingSocket.icmpRoundTripTime > PingRoundTrip)
PingSocket.icmpRoundTripTime = PingRoundTrip;
if (PingSent)
{
UpdateTrace();
if (!icmpTracing)
{
m_TraceList.InsertItem (m_TraceList.GetItemCount(),
"",
Icon_BlueArrow);
SetTraceFocus (m_TraceList.GetItemCount()-1,
0);
DisplayTrace ("","","Host Reached");
}
}
}
PingSent = FALSE;
if (icmpTracing)
{
PingSocket.icmpHops++;
if ( (PingSocket.icmpHops >= PingSocket.icmpMaxHops) ||
(TraceTarget.s_addr == PingSocket.rcvSockAddr.sin_addr.s_addr ))
{
EndTrace();
m_TraceList.InsertItem (m_TraceList.GetItemCount(),
"",
Icon_BlueArrow);
SetTraceFocus (m_TraceList.GetItemCount()-1,
0);
DisplayTrace ("","","HOST Reached");
}
else
{
ChangeIconState();
SendPing();
}
}
break;
case FD_WRITE:
break;
default:
break;
}
return 0;
}
/
没有合适的资源?快使用搜索试试~ 我知道了~
计算机网络课程设计(ping和tracert的实现)
共79个文件
obj:14个
cpp:8个
ico:8个
5星 · 超过95%的资源 需积分: 34 300 下载量 198 浏览量
2010-11-26
14:33:27
上传
评论 27
收藏 5.32MB RAR 举报
温馨提示
通过网络相关程序的编写,深入理解TCP/IP协议机制,以及初步掌握基于Winsocket的网络编程技术。熟悉原始套接字的编程,了解网络的结构和网络传输底层协议。了解IP工作原理,和ICMP基于ICMP差错报告报文和ICMP询问报文的应用。了解PING命令和TRACERT命令的相关知识。
资源推荐
资源详情
资源评论
收起资源包目录
Ping和Tracert工具的实现.rar (79个子文件)
Ping和Tracert工具的实现
071_董江凯_070806110154.doc 334KB
附录(可执行文件和部分代码)
PingPlus.exe 160KB
PingPlusDlg.cpp 30KB
ping和tracert的实现(工程)
PingPlusDlg.h 5KB
PingPlus.aps 34KB
StdAfx.cpp 206B
RegKey.h 4KB
PingPlus.cpp 2KB
Icmp.h 15KB
PingPlus.ico 766B
Icmp.cpp 30KB
PingPlus.rc 11KB
SysTCPIP.cpp 6KB
PingPlusDlg.ncb 33KB
Icmp.ncb 41KB
PingPlus.h 919B
PingPlusDlg.opt 48KB
PingPlusDlg.dsp 3KB
PingPlus.opt 63KB
Debug
PingPlusDlg.pdb 25KB
Icmp.sbr 6KB
vc60.pdb 124KB
vc60.idb 257KB
PingPlusDlg.obj 80KB
PingOptionsDlg.obj 13KB
Icmp.pdb 25KB
PingPlusDlg.sbr 19KB
PingPlus.pch 4.28MB
PingPlusDlg.pch 3.3MB
Icmp.obj 20KB
PingOptionsDlg.sbr 3KB
SysTCPIP.obj 17KB
StdAfx.obj 54KB
PingPlus.res 22KB
SysTCPIP.sbr 3KB
RegKey.sbr 4KB
PingPlus.obj 15KB
PingPlus.pdb 3.38MB
RegKey.obj 25KB
StdAfx.sbr 805KB
PingPlus.exe 1.34MB
PingPlus.sbr 7KB
PingPlus.ilk 1.75MB
RegKey.cpp 11KB
StdAfx.h 492B
PingOptionsDlg.h 849B
SysTCPIP.h 4KB
PingPlus.dsw 541B
Icmp.plg 1KB
PingPlus.plg 1KB
Resource.h 2KB
Icmp.rc 6KB
Release
vc60.idb 81KB
PingPlusDlg.obj 48KB
PingOptionsDlg.obj 8KB
PingPlus.pch 3.77MB
Icmp.obj 10KB
SysTCPIP.obj 10KB
StdAfx.obj 542B
PingPlus.res 22KB
PingPlus.obj 10KB
RegKey.obj 14KB
PingPlus.exe 160KB
Icmp.opt 53KB
Icmp.dsp 3KB
res
inet3.ico 766B
ico00003.ico 1KB
PingPlus.ico 766B
PingPlus.rc2 400B
inet4.ico 766B
Inet2.ico 766B
Inet1.ICO 766B
icon1.ico 1KB
PingPlusDlg.plg 674B
PingOptionsDlg.cpp 1KB
PingPlus.dsp 5KB
PingPlusDlg.cpp 30KB
PingPlus.ncb 409KB
PingPlus.clw 3KB
共 79 条
- 1
dongjiankai
- 粉丝: 3
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页