WinCE 下实现 ping 功能

需要包括的头文件与库文件:

 1 #include "Winsock2.h"
 2 // PING
 3 #include "Ipexport.h"
 4 #include "Icmpapi.h"
 5 #include "winsock.h"
 6
 7 extern HWND ghMainWnd;
 8
 9 #pragma comment (lib, "Iphlpapi.lib")
10 #pragma comment (lib, "Ws2.lib")   

源代码如下:

 1 int Ping(TCHAR *Address , int iTtl , int iWaitTime , TCHAR *szName , int *prtt)
 2 {
 3     IPAddr                ipAddress ;
 4     IP_OPTION_INFORMATION ipInfo ;
 5     ICMP_ECHO_REPLY       icmpEcho;
 6     HANDLE                hFile;
 7     char                  strHost  [ MAX_PATH ] ;
 8     TCHAR                 szPCName [ MAX_PATH ]  = { TEXT( "" ) } ;
 9     int                   iRet = -1 ;
10     struct in_addr iaDest;      // Internet address structure
11     LPHOSTENT pHost;            // Pointer to host entry structure
12
13     RETAILMSG(1,(L"TICK: %d - [TCP Client]Enter Ping......\r\n",GetTickCount() / 1000));
14
15     _tcscpy( szName , TEXT("") );
16     WideCharToMultiByte( CP_ACP, 0, Address , -1, strHost, sizeof( strHost ), NULL, FALSE );
17     ipAddress = inet_addr(strHost);
18     iaDest.s_addr = inet_addr(strHost);
19     if (iaDest.s_addr == INADDR_NONE)
20     {
21         pHost = gethostbyname(strHost);
22         if( pHost )
23         {
24             char *pIP ;
25             iaDest.S_un.S_addr = *(DWORD *)(*pHost->h_addr_list) ;
26             pIP = inet_ntoa( iaDest ) ;
27             if( strlen( pIP ) )
28                 MultiByteToWideChar( CP_ACP, 0, pIP , -1, szPCName, sizeof( szPCName ) );
29             if( _tcslen( szPCName ) )
30                 _tcscpy( szName , szPCName );
31         }
32     }
33     else
34     {
35         pHost = gethostbyaddr((const char *)&iaDest,
36             sizeof(struct in_addr), AF_INET);
37         if( pHost )
38         {
39             MultiByteToWideChar( CP_ACP, 0, pHost->h_name , -1, szPCName, sizeof( szPCName ) );
40             if( _tcslen( szPCName ) )
41                 _tcscpy( szName , szPCName );
42         }
43     }
44     if( pHost )
45         ipAddress = *(DWORD *)(*pHost->h_addr_list) ;
46     if (ipAddress != INADDR_NONE)
47     {
48         iRet = 0 ;
49         hFile = IcmpCreateFile();
50
51         // Set some reasonable default values
52         ipInfo.Ttl   = iTtl ;
53         ipInfo.Tos   = 0;
54         ipInfo.Flags = 0;
55         ipInfo.OptionsSize = 0 ;
56         ipInfo.OptionsData = NULL ;
57         icmpEcho.Status    = IP_REQ_TIMED_OUT/*IP_SUCCESS*/ ;
58         IcmpSendEcho( hFile , ipAddress , NULL , 0 ,
59             (PIP_OPTION_INFORMATION)&ipInfo,
60             &icmpEcho , sizeof(ICMP_ECHO_REPLY) , iWaitTime ) ;
61         IcmpCloseHandle(hFile) ;
62         if ( icmpEcho.Status == IP_SUCCESS )
63             iRet = 1 ;
64
65         *prtt = icmpEcho.RoundTripTime ;
66     }
67     return iRet ;
68 }  

调用示例:

 1 static LPTSTR strIpAddr[] =
 2 {
 3     L"202.96.209.5",    // 上海 DNS
 4     L"220.181.6.18",    // 百度
 5     L"202.100.4.15",    // 西安 DNS
 6 };
 7
 8 TCHAR tcName[MAX_PATH] = {0};
 9 int iPtt = 0;
10 int iPingRet = Ping(strIpAddr[giPingIndex],128,3000,tcName,&iPtt);  //ping tmc server
11
12 if(iPingRet == 1)
13 {
14     RETAILMSG(1, (TEXT("TICK: %d - Ping IP: %s Success.\r\n"),GetTickCount() / 1000, strIpAddr[giPingIndex]));
15 }
16 else
17 {
18 }
时间: 2024-10-14 11:55:38

WinCE 下实现 ping 功能的相关文章

Windows下Ping功能的实现(VC++)

网上的实现Ping功能的代码很多,以前用过一段代码,在windows user组用户下操作会失败,下面贴出一个可用的 // PING.cpp : Defines the entry point for the console application.// #include "stdafx.h"#include <winsock2.h>#include <iphlpapi.h>#include <icmpapi.h>#include <stdli

WinCE下GPRS自动拨号软件(GPRS AutoDial)

之前在WinCE下调试USB的3G Modem时,写过一个拨号助手RASManager,基本能用.后来车机卖到俄罗斯去,客户老M提供了一个更好的GPRS自动拨号软件GPRS AutoDial,功能完善且强大,RASManager基本就废弃了. GPRS AutoDial的使用方法如下图所示. GPRS AutoDial v1.4.3下载地址,http://files.cnblogs.com/files/we-hjb/GPRS_AD_1.4.3.rar

AWS开通ping功能

AWS免费使用注意事项: AWS(Amazon Web Service)提供的为期一年的Free Tier很是诱人,相信已有不少人在用,但是使用过程中有些事项一定要注意,以免在不知情的情况下被扣费. 1.EC2:创建实例时,要选标有有Free tier eligible 的操作系统,这类系统是免费提供的,不另收费.但请注意:不要使用RHEL(Red Hat Enterprise Linux),此系统占用的EBS空间大而且极费IO,每月200万的免费IO不出两天就能耗完.另,免费额度只够创建一个E

Wince下sqlce数据库开发(一)

对于Wince下的sqlce数据库虽然很多人在用,但在我查找资料时,却发现资料是多么的匮乏,在此对自己这几天的了解做个简单介绍,希望对大家能有所帮助! 本文的最后附有所使用到的sqlce在wince下的安装文件,wince截屏工具及本示例代码的下载地址. 1.创建wince项目: 注:wince项目的创建需要在VS2008或者VS2005下 图1 创建“智能设备项目” 2.制作主界面 为主界面添加两个控件,分别为:datagrid和button,分别用于数据显示和功能控制. 图2 制作主界面 3

WINCE下进程间通信(一)

WINCE下进程间通信(一) 在WINCE开发中经常需要在不同的进程之间传递.共享数据,总结了一下,WINCE下进程间通信常用的方式有:Windows消息,共享内存,socket通信,管道,全局原子,邮槽等,下面就分别对这几种方法做个小结.(当然还可以采用注册表,磁盘文件以及数据库方式,只是这几种方式的通信效率和实时性比较低,所以一般不考虑.) 一.Windows消息 通过Windows消息,可以很方便的在进程与进程之间传递数据.对于传递像字符串这种小的数据,可以直接将字符串以消息参数wPara

WinCE下使用C#获得带毫秒的DateTime.Now

在WinCE下,使用DateTime.Now获取的系统时间是不带毫秒的,如果想要它带毫秒,需要耍点手段.话不多说,直接上代码: public static DateTimePrecisely { //定义一个全局变量,用来保存一个毫秒的0点. private static int m_offset = 0; static DateTimePrecisely() { int s = DateTime.Now.Second; //我们需要等待一次跨秒,来定义毫秒的0点. while (true) {

android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableListView,GridView,WebView等. 下载地址:https://github.com/chrisbanes/Android-PullToRefresh 首先第一步当然是导入libriay到咱们的项目了,具体导入方式,这里不再赘述. 下面是个例子采用的是ListView,当然其余的和这

Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在网上直接找一个现成的,可是尝试了网上多个版本的下拉刷新之后发现效果都不怎么理想.有些是因为功能不完整或有Bug,有些是因为使用起来太复杂,十全十美的还真没找到.因此我也是放弃了在网上找现成代码的想法,自己花功夫编写了一种非常简单的下拉刷新实现方案,现在拿出来和大家分享一下.相信在阅读完本篇文章之后,大

Xamarin. Android实现下拉刷新功能

下拉刷新功能在安卓和iOS中非常常见,一般实现这样的功能都是直接使用第三方的库,网上能找到很多这样的开源库.然而在Xamarin. Android中要实现一个好用的下拉刷新功能却不是很容易,在网上找了几个Xamarin.Android的下拉刷新控件,都不是很满意,所以想重新绑定一个java写的下拉刷新控件.在网上找了几个这样的开源库,通过对比发现android-pull-to-refresh实现的功能比较多,实现的效果也比较满意. Android-Pull-To-Refresh项目地址:http