网络编程:如何取得当前各种网络连接的状态
来源:互联网 发布:mac double gleam 编辑:程序博客网 时间:2024/05/17 03:21
近几天接到一个任务,要在WINCE 6.0下做一个GPRS的流量统计软件,因为之前完全没有接触过这个方面,所以很是头疼,完全没有思路,不过经过几天在网上的搜索,找到了两种方案。
第一个是使用WINDOWS的IP HELPER相关函数,这些函数在iphlpapi.dll中。如果你更习惯静态调用,那么可以在你的SDK中寻找iphlpapi.h和iphlpapi.lib。包含到你的工程中就可以使用。
第二个是使用原始套接字raw socket。一个一个的去计算数据包的大小。
先来看第一种,如果你使用动态调用,那么你需要定义两个结构,关于这两个结构的详细说明可以再MSDN上找到
http://msdn.microsoft.com/en-us/library/aa366836(v=VS.85).aspx
typedef struct _MIB_IFROW
{
WCHAR wszName[MAX_INTERFACE_NAME_LEN];
DWORD dwIndex;
DWORD dwType;
DWORD dwMtu;
DWORD dwSpeed;
DWORD dwPhysAddrLen;
BYTE bPhysAddr[MAXLEN_PHYSADDR];
DWORD dwAdminStatus;
DWORD dwOperStatus;
DWORD dwLastChange;
DWORD dwInOctets;
DWORD dwInUcastPkts;
DWORD dwInNUcastPkts;
DWORD dwInDiscards;
DWORD dwInErrors;
DWORD dwInUnknownProtos;
DWORD dwOutOctets;
DWORD dwOutUcastPkts;
DWORD dwOutNUcastPkts;
DWORD dwOutDiscards;
DWORD dwOutErrors;
DWORD dwOutQLen;
DWORD dwDescrLen;
BYTE bDescr[MAXLEN_IFDESCR];
} MIB_IFROW,*PMIB_IFROW;
typedef struct _MIB_IFTABLE
{
DWORD dwNumEntries; //连接格式
MIB_IFROW table[ANY_SIZE];//连接信息
} MIB_IFTABLE, *PMIB_IFTABLE;
然后定义变量
MIB_IFROW *pIfRow;
#define MAX_INTERFACE_NAME_LEN 256
#define MAXLEN_PHYSADDR 8
#define MAXLEN_IFDESCR 256
#define ANY_SIZE 1
然后调用iphlpapi的GetIfTable函数,就可以把这个数据结构填满,注意GetIfTable必须要调用两次,第一次确定大小,第二次才能正确的填充。
if (lpGetIfTable(pMIT, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER)
{
delete []pMIT;
pMIT = new MIB_IFTABLE[dwSize];
}
//dwNumEntries alwayse>=1, and the last entry is loopback interface.
if (lpGetIfTable(pMIT, &dwSize, 0) == NO_ERROR)
{
for (int i = 0; i < (int) pMIT->dwNumEntries; i++)
{
pIfRow = (MIB_IFROW *) & pMIT->table[i];
}
}
接下来就可以根据pIfRow 中的内容去判断需要的是哪个连接的信息,并且去处理这些信息了。
- 网络编程:如何取得当前各种网络连接的状态
- Linux服务器当前各种TCP网络连接状态的统计
- Linux服务器当前各种TCP网络连接状态的统计
- 如何判断当前网络连接状态(网络是否正常)
- 判断各种网络的连接状态
- 监测当前网络连接状态
- netstat查看当前网络下TCP的各种状态
- 如何去检测网络的连接状态
- Android 如何判断网络的连接状态
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- 【iOS解决方案】如何判断当前网络连接状态(网络是否正常)
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- 如何判断网络连接状态
- C#检测当前网络连接状态
- Android 判断当前网络连接状态
- iPhone判断当前网络连接状态
- 彩色图像与灰度图像转换的程序设计
- 启用SQL Server 2008 FILESTREAM功能
- How to break out of a chroot() jail
- 第27届中国数据库学术会议
- 浏览器兼容笔记
- 网络编程:如何取得当前各种网络连接的状态
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- js 合并单元格的方法(使用直接调用数据时排列好的)
- 有关如何判断平面上两直线是否平行的问题
- 两个HIST怎么公用通一个X轴
- 重编译
- [转]SEO新手必须了解的六个常用步骤
- Linux后台运行MATLAB命令
- PeopleTools Security