• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 关于ping的问题请教

关于ping的问题请教

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 关于ping的问题请教等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于ping的问题请教
描述:

我想在asp页面上加一个按钮,当用户点击之后,服务器(客户端也行)就会去ping一个或一组ip,完毕后将结果返回到页面上。当然直接去执行ping命令可以解决问题,但是ping会返回一些无用信息且对一些复杂操作无能为力,所以我想写一个activex控件去模拟ping的功能,不知道该如何实现?以前都是直接用别人写的
,现在只好自己写了,而且很急,希望各位高手能指点一二。。
问题一:单纯用c语言写一个有此功能的exe,要用到那些函数?????
问题二:这一插件运行在web服务器和客户端在功能和写法上有何区别?在编写时应该注意哪些问题?
问题三:如上一问题不好回答,能否给推荐一本书或电子文档我自己去学习。
多谢了!!!


解决方案1:

下面的函数是使用多线程Ping
开始扫描
UINT PingThread( LPVOID pParam )
{
CPingThreadInfo* pThreadInfo = (CPingThreadInfo*)pParam;
HWND m_hWnd = pThreadInfo->m_hwndNotifyWnd;
SOCKET   rawSocket;
struct    sockaddr_in saDest;
struct    sockaddr_in saSrc;
unsigned int tempIP=0;
int nRet;
DWORD   dwTimeSent,dwElapsed;
u_char    cTTL;
LPHOSTENT lpHost;
HOSTENT HostInfo;
int nZ />
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
tempIP=pThreadInfo->uintIP[0];
pThreadInfo->nRetries=1;
while (tempIP<=pThreadInfo->uintIP[1])
{
if (WaitForSingleObject(pThreadInfo->m_hEventKillPing,0)== WAIT_OBJECT_0)
break;
saDest.sin_addr.S_un.S_addr =htonl(tempIP);
unsigned int ip1=0,ip2=0;
ip2=htonl(tempIP);
saDest.sin_family = AF_INET;
saDest.sin_port = 0;
for (int nLoop = 0; nLoop < pThreadInfo->nRetries; nLoop++)
{
if (WaitForSingleObject(pThreadInfo->m_hEventKillPing,0)== WAIT_OBJECT_0)
break;
// Send ICMP echo request
SendEchoRequest(rawSocket, &saDest);
::PostMessage(pThreadInfo->m_hwndNotifyWnd,WM_MSG_SEARCH_DISPLAY,0,(LPARAM)ip2);
nRet=WaitForEchoReply(rawSocket);
if (!nRet)
{
}
else
{
if (WaitForSingleObject(pThreadInfo->m_hEventKillPing,0)== WAIT_OBJECT_0)
break;
// Receive reply
dwTimeSent = RecvEchoReply(rawSocket, &saSrc, &cTTL);
// Calculate elapsed time
dwElapsed = GetTickCount() - dwTimeSent;
::PostMessage(pThreadInfo->m_hwndNotifyWnd,WM_MSG_SEARCH_FIND,0,(LPARAM)ip2);
//
}
::Sleep(20);
}
tempIP++;
}
nRet = closesocket(rawSocket);
WSACleanup();
::PostMessage(pThreadInfo->m_hwndNotifyWnd,WM_MSG_SEARCH_PINGSTOP,0,0);
return 1;
}
typedef struct CPingThreadInfo
{
//IP Zone
unsigned int uintIP[2];
//Retry count
int nRetries;
int nThreshold;
HANDLE m_hEventKillPing;
HWND m_hwndNotifyWnd;
} CPingThreadInfo;
下面是调用的过程
         CPingThreadInfo m_ThreadInfo;
UpdateData(true);
m_ipfrom.GetAddress(ipfrom);
m_ipto.GetAddress(ipto);
if(ipfrom > ipto)
{
AfxMessageBox("Input error!");
return;
}
m_ThreadInfo.uintIP[0]=ipfrom;
m_ThreadInfo.uintIP[1]=ipto;
m_ThreadInfo.m_hwndNotifyWnd = this->GetSafeHwnd();
m_Thread= AfxBeginThread(PingThread,&m_ThreadInfo);
结束扫描
SetEvent(m_ThreadInfo.m_hEventKillPing);
VC6.0+多线程


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-04 创建ATL工程的时候,多了一个同名字但是带有PS后缀的工程,那是干什么用的?
  • 2017-06-04 那位大虾知道那里有对COM技术进行培训的地方,谢谢!
  • 2017-06-05 线程崩溃了,如何能否不导致整个程序崩溃?
  • 2017-06-04 ATL属性页里能不能加CTreeCtrl控件啊
  • 2017-06-05 如何彻底实现锁定键盘,包括ctrl+alt+del三个键????
  • 2017-06-04 为什么在ASP中调用不了OCX的属性和方法?
  • 2017-06-04 难题!DCOM中能不能固定某个端口,或某段端口
  • 2017-06-04 有关用ATL写OLEDB数据消费者的问题,请各位高手指教:
  • 2017-06-04 关于易海图的控件
  • 2017-06-05 Win2k的CRITICAL_SECTION实现好像使用了EVENT对象

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 动态加载与静态加载有区别???
    • 怎样把原来做的SDI文档程序封装到ActiveX里面?
    • 如何结束线程
    • 请教有关mediaservice相关控件请高人做答!!!谢谢
    • 请问pub3216h是哪儿的?vc50中的吗?
    • 学习了N本关于com和activex的书,得出以下的结论,不知道是否完全正确,大家来看看
    • VS2005编译一个ATL工程出现“未能注册输出”
    • MicrosoftMediaPlayerActiveXControl里的Event在Html里怎么处理?
    • 调用ACTIVEX控件时,TSTCON32错误
    • bstr型变量在vbscript里面调用我传递string类型怎么说类型不匹配的错误?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有