⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pingexamdlg.cpp

📁 EVC的PING例子代码
💻 CPP
字号:
// PingExamDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "PingExam.h"
#include "PingExamDlg.h"

#include <icmpapi.h>
#include <winsock.h>
#include <ipExport.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CPingExamDlg 对话框

CPingExamDlg::CPingExamDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPingExamDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPingExamDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CPingExamDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
	ON_WM_SIZE()
#endif
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BTN_PING, &CPingExamDlg::OnBnClickedBtnPing)
	ON_BN_CLICKED(IDC_BTN_CLEAR, &CPingExamDlg::OnBnClickedBtnClear)
END_MESSAGE_MAP()


// CPingExamDlg 消息处理程序

BOOL CPingExamDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CPingExamDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
	if (AfxIsDRAEnabled())
	{
		DRA::RelayoutDialog(
			AfxGetResourceHandle(), 
			this->m_hWnd, 
			DRA::GetDisplayMode() != DRA::Portrait ? 
			MAKEINTRESOURCE(IDD_PINGEXAM_DIALOG_WIDE) : 
			MAKEINTRESOURCE(IDD_PINGEXAM_DIALOG));
	}
}
#endif

/*
*函数介绍:CE下Ping方法
*入口参数:cIPAddr  : IP地址
*出口参数:pListBox : CListBox对象,用于显示Ping信息
*返回值:(无)
*/
void CEPing(CString cIPAddr,CListBox * pListBox)
{
   	WSAData wsaData;
	//初始化Socket动态链接库
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        return ;
    }
	
	/*将IP地址转换成单字节*/
    char szDestIPAddr[255];
	ZeroMemory(szDestIPAddr,255);
	WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK
		,cIPAddr.GetBuffer(cIPAddr.GetLength()),cIPAddr.GetLength()
		,szDestIPAddr,cIPAddr.GetLength(),NULL,NULL);
	
	IPAddr ipAddr;
	//将目标字符串IP地址转换成IPAddr结构
    ipAddr = inet_addr(szDestIPAddr);      
	
	if (ipAddr == INADDR_NONE) 
	{
		AfxMessageBox(_T("地址无效"));
		return ;
	}
	
	// 打开ping服务
    HANDLE hIP = IcmpCreateFile();
    if (hIP == INVALID_HANDLE_VALUE) {
        AfxMessageBox(_T("不能打开Ping服务"));
        return ;
    }
	
	
	// 构造ping数据包
    char acPingBuffer[64];
    memset(acPingBuffer, '*', sizeof(acPingBuffer));
    PICMP_ECHO_REPLY pIpe = (PICMP_ECHO_REPLY)GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT,
		sizeof(ICMP_ECHO_REPLY) + sizeof(acPingBuffer)); 
    if (pIpe == 0) {
		AfxMessageBox(_T("分配ping包缓冲区失败"));
        return ;
    }
    
	CString m_recv;
    // 发送ping数据包
	m_recv = CString(L"ping ")+cIPAddr+CString(L" with 64 Bytes");
	pListBox->AddString(m_recv);
    for (int i=0;i<4;i++)
	{
		//发送ping服务包,等待接收时间为1秒
		DWORD dwStatus = IcmpSendEcho(hIP,ipAddr, 
            acPingBuffer, sizeof(acPingBuffer), NULL, pIpe, 
            sizeof(ICMP_ECHO_REPLY) + sizeof(acPingBuffer), 1000);
		//当dwStatus不等于0,代表接收到回应
		if (dwStatus != 0) {
			m_recv.Format(_T("Reply From %d.%d.%d.%d :bytes=%d time=%d TTL")
				,int(LOBYTE(LOWORD(pIpe->Address)))
				,int(HIBYTE(LOWORD(pIpe->Address)))
				,int(LOBYTE(HIWORD(pIpe->Address)))
				,int(HIBYTE(HIWORD(pIpe->Address)))
				,int(pIpe->DataSize)
				,int(pIpe->RoundTripTime)
				,int(pIpe->Options.Ttl));
			pListBox->AddString(m_recv);
		}
		else 
		{
			pListBox->AddString(_T("Error obtaining info from ping packet."));
		}
	}
    //释放已分配的内存
    GlobalFree(pIpe);
	//关闭Ping服务
    IcmpCloseHandle(hIP);
    //释放Socket资源
	WSACleanup();
}


//ping button
void CPingExamDlg::OnBnClickedBtnPing()
{
	CString strIPAddr = L"";
	CEdit *pEdtIP = (CEdit*)GetDlgItem(IDC_EDT_IPADDRESS);
	CListBox *pLstResult = (CListBox*)GetDlgItem(IDC_LST_PING_RESULT);

	pEdtIP->GetWindowText(strIPAddr);
	CEPing(strIPAddr,pLstResult);
}

//clear button
void CPingExamDlg::OnBnClickedBtnClear()
{
	CListBox *pLstResult = (CListBox*)GetDlgItem(IDC_LST_PING_RESULT);
	pLstResult->ResetContent();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -