第一范文网 - 专业文章范例文档资料分享平台

课程设计---Ping程序设计与实现

来源:用户分享 时间:2025/11/19 4:21:20 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

void InitImageList();

int AddListColumn(int column, int lfmt, int lmaxwidth, LPSTR ltext, int lsubitem); void DisplayBlankLine(void);

void SetTraceSequence(int Seq, int FocusItem, ImageType FocusImage); void SetTraceFocus(int FocusItem, int FocusSubItem);

void SetDisplayImage(int FocusItem, enum ImageType FocusImage); void TraceComment(CString Comment);

public:

CPingPlusDlg(CWnd* pParent = NULL); // 标准构造器

protected:

HICON m_hIcon;

LRESULT OnPINGAsynch(WPARAM wParam, LPARAM lParam);

public: CIcmp

PingSocket;

// Icmp 对象

WSADATA wsaData; // Windows Socket 信息结构 CString LocalNameServer; CString LocalDomainName; CString

DefHost;

// 域名 (从注册机构获取) // 默认主机名 (从注册机构获取)

// 将主机名加入到会话中去

char HostName[MAXHOSTNAME];

char CurrentHostName[MAXHOSTNAME]; // 当前正在ping的主机 struct in_addr TraceTarget; BOOL TimerActive; unsigned long unsigned long char LPSTR int int BOOL BOOL

// 操作路径终端

// TRUE = 计时器到时

icmpIntervalCount; // 当前计时时间间距 icmpMaxIntervals; // 最大间距

icmpBuffer[MAX_PACKET]; // icmp操作的普通缓冲区 pIcmpBuffer;

// icmp缓冲区的故障分析报告指向

icmpDataLen; icmpPingTTL;

// icmp发出信息的字节数 (不计算头部) // 路径操作所用到的ttl值

icmpTracing;// TRUE = 路径操作, FALSE = PING操作 PingSent; // TRUE = 等待ECHO回复, FALSE = 忽略输入

8

};

四、程序主题功能设计模块 1、调用ping模块

void CPingPlusDlg::OnPingButton() {

IconState = 0; DisplayBlankLine (); icmpTracing = FALSE;

icmpPingTTL = PingSocket.icmpMaxHops; //ping生存时间为最大icmp跳数

PingSocket.icmpCurSeq = 0;//当前icmp序列为0 }

SendPing ( );//开始执行ping

2、初始化socket

BOOL CPingPlusDlg::InitSockets() {

if (!PingSocket.OpenNewSocket(GetSafeHwnd(),

{ }

PingSocket.DisplayError (\

\

WSA_PING_ASYNC, FD_READ | FD_WRITE, AF_INET, SOCK_RAW, IPPROTO_ICMP))

return FALSE;

9

}

return TRUE;

3、获取winsocket设置信息

BOOL CPingPlusDlg::FetchWinsockSettings() {

SysTCPIP

STcpIp;

if (!STcpIp.WinsockVersion(&wsaData))

{ }

MessageBox (\

\MB_OK|MB_SYSTEMMODAL);

return FALSE;

if (!STcpIp.GetLocalHostName (&m_LocalHost))

{

gethostname(CurrentHostName, MAXHOSTNAME);

} else { }

m_LocalHost = CurrentHostName;

if (!STcpIp.GetDomainName(&LocalDomainName))

LocalDomainName = \

memcpy (CurrentHostName, m_LocalHost, m_LocalHost.GetLength()); CurrentHostName[m_LocalHost.GetLength()] = 0;

m_LocalHost += \

memcpy (CurrentHostName, m_LocalHost, m_LocalHost.GetLength()); CurrentHostName[m_LocalHost.GetLength()] = 0;

10

if (!STcpIp.GetNSName (&LocalNameServer))

LocalNameServer = \

m_NameServer = \

SetDlgItemText (IDC_LocalHost, m_LocalHost); SetDlgItemText (IDC_NameServer, m_NameServer);

LoadRegValues();

SetDlgItemText (IDC_DEST, HostName); return TRUE; }

4、发送ping信息

void CPingPlusDlg::SendPing(void) {

PingSent = TRUE;

PingSocket.icmpCurSeq++;

PingSocket.icmpCurId = (USHORT)GetCurrentProcessId();

PingSocket.icmpHostAddress = HostIPAddress();

if (PingSocket.icmpHostAddress == NULL)

return;

if (icmpTracing) {

icmpPingTTL++; }

if (PingSocket.SetTTL (icmpPingTTL) == SOCKET_ERROR)

{ PingSocket.DisplayError (\

}

\

return;

Sleep (100);// 用蓝色箭头显示序列号及相应信息

SetTraceSequence (PingSocket.icmpCurSeq,

m_TraceList.GetItemCount(),

11

搜索更多关于: 课程设计---Ping程序设计与实现 的文档
课程设计---Ping程序设计与实现.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c18lix95dlo9sc9l3ppnv1xep036fj70199e_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top