打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
MFC 实现ping功能。整理来的
禁忌石
>《socket》
2017.05.31
关注
MFC 实现ping功能。整理来的
2012-03-13
0
个评论
收藏
我要投稿
[cpp]
<pre name="code" class="cpp">
// 参数:
// szTarget目标地址(可以是域名、IP地址)
// dwTime返回时间;如果是超时,等于INFINITE
BOOL 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;
}
摘自 牧心_hp 学习人生
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
VC获取MAC地址的4种方法
Windows下实现进程保护
exe、msi、dos、bat等静默运行,后台运行,不弹窗的解决办法
服务程序需要当前用户权限的方法(?)
双进程保护
非同凡响,C 调用PHP - C|C - 编程开发 - 伊甸网
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×