MFC 实现ping功能。整理来的
来源:互联网 发布:linux安装gcc教程 编辑:程序博客网 时间:2024/04/29 13:10
// 参数:// szTarget目标地址(可以是域名、IP地址)// dwTime返回时间;如果是超时,等于INFINITEBOOL Ping(LPCTSTR szTarget, DWORD &dwTime){ BOOL bSuccess = FALSE; dwTime = INFINITE; if(szTarget == NULL) { TRACE0("Target Is NULL\n"); return FALSE; } TCHAR szCmdLine[80]; if(_sntprintf(szCmdLine, sizeof(szCmdLine) / sizeof(TCHAR), _T("ping.exe -n 1 %s"), szTarget) == sizeof(szCmdLine) / sizeof(TCHAR)) { TRACE0("Target Is Too Long\n"); return FALSE; } HANDLE hWritePipe = NULL; HANDLE hReadPipe = NULL; HANDLE hWriteShell = NULL; HANDLE hReadShell = NULL; SECURITY_ATTRIBUTES sa; memset(&sa, 0, sizeof(sa)); sa.nLength = sizeof(sa); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; if(CreatePipe(&hReadPipe, &hReadShell, &sa, 0) && CreatePipe(&hWriteShell, &hWritePipe, &sa, 0)) { STARTUPINFO si; memset(&si, 0, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.hStdInput = hWriteShell; si.hStdOutput = hReadShell; si.hStdError = hReadShell; si.wShowWindow = SW_HIDE; PROCESS_INFORMATION pi; memset(&pi, 0, sizeof(pi)); int nMin = -1, nMax = -1, nAvg = -1; if(CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { if(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0) { TCHAR szBuffer[1024]; DWORD dwBytes; if(ReadFile(hReadPipe, szBuffer, sizeof(szBuffer), &dwBytes, NULL)) { szBuffer[dwBytes] = '\0'; LPTSTR lpszTime = NULL; lpszTime = _tcsstr(szBuffer, _T("Request timed out")); if(lpszTime == NULL) { lpszTime = _tcsstr(szBuffer, _T("Minimum")); if(lpszTime != NULL) { if(_stscanf(lpszTime, _T("Minimum = %dms, Maximum = %dms, Average = %dms"), &nMin, &nMax, &nAvg) == 3) { TRACE3("%d, %d, %d\n", nMin, nMax, nAvg); dwTime = nAvg; bSuccess = TRUE; } } else { TRACE0("PING FORMAT is Error\n"); } } else { TRACE0("PING is Time Out\n"); bSuccess = TRUE; } } } else { TRACE1("Process(%d) is Time Out\n", pi.dwProcessId); TerminateProcess(pi.hProcess, 0); } CloseHandle(pi.hThread); CloseHandle(pi.hProcess); TRACE3(_T("Minimum = %dms, Maximum = %dms, Average = %dms\n"), nMin, nMax, nAvg); } } if(hWritePipe != NULL) CloseHandle(hWritePipe); if(hReadPipe != NULL) CloseHandle(hReadPipe); if(hWriteShell != NULL) CloseHandle(hWriteShell); if(hReadShell != NULL) CloseHandle(hReadShell); return bSuccess;}
欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611
欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611
- MFC 实现ping功能。整理来的
- C# 实现的Ping功能
- ping功能的实现原理
- java实现ping的功能
- 用VC调用DOS命令来实现PING功能
- 自己的Ping程序(MFC实现)
- VB中Ping功能的实现
- 用Java实现Ping的功能
- 用Java实现Ping的功能(续)
- ASP.NET中实现ping的功能
- C实现Windows下的ping功能
- 实现类似ping功能的C源代码
- 使用Java实现ping的功能
- C++之编码实现ping的功能
- ucos下lwip的ping功能实现
- java实现ICMP协议的ping功能
- 方法:如何解决用MFC实现的ping功能中把目标主机不可到达的当成ping通的问题
- java 实现ping功能
- android wifi驱动开发日记
- c语言的表达式优先级中左结合 含义
- 键盘事件
- 求所有的出栈序列
- 传智播客创始人张孝祥因病去世(转)
- MFC 实现ping功能。整理来的
- Android学习笔记 - 数据库篇 (SQLite)
- ubuntu设置Ip,重启不失效
- SQL Server 创建表 添加主键 添加列常用SQL语句
- common lisp中once-only 宏
- 数字 排列组合 图表智力题目(SB)
- ubuntu自动使用root用户登录
- linux 开机自动运行程序
- 大牛是如何练成的?