网上的那些所谓的谈端口和进程映射的例子都不能使用,后来买了这本书,找到了好用的例子。真不明白那些人为什么要把没有用的了例子放到网上去恶心人,自己连试也不试就放到了网上,真的很让人恶心。
这个例子是《visusl c++网络程序设计实例详解》(人民邮电)第七章里面的最后一个例子,很好用,所以放到网上来和大家分享一下。
使用下面的代码的前提是要安装windows2003的PlatformSDK,可以到这里下载http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
//
// netstate.cpp文件
#include <stdio.h>
#include <windows.h>
#include <Iphlpapi.h>
#include <tlhelp32.h>
#pragma comment(lib, "Iphlpapi.lib")
#pragma comment(lib, "WS2_32.lib")
typedef struct
{
DWORD dwState; // 连接状态
DWORD dwLocalAddr; // 本地地址
DWORD dwLocalPort; // 本地端口
DWORD dwRemoteAddr; // 远程地址
DWORD dwRemotePort; // 远程端口
DWORD dwProcessId; // 进程ID号
} MIB_TCPEXROW, *PMIB_TCPEXROW;
typedef struct
{
DWORD dwNumEntries;
MIB_TCPEXROW table[ANY_SIZE];
} MIB_TCPEXTABLE, *PMIB_TCPEXTABLE;
typedef struct
{
DWORD dwLocalAddr; // 本地地址
DWORD dwLocalPort; // 本地端口
DWORD dwProcessId; // 进程ID号
} MIB_UDPEXROW, *PMIB_UDPEXROW;
typedef struct
{
DWORD dwNumEntries;
MIB_UDPEXROW table[ANY_SIZE];
} MIB_UDPEXTABLE, *PMIB_UDPEXTABLE;
// 扩展函数原型
typedef DWORD (WINAPI *PFNAllocateAndGetTcpExTableFromStack)(
PMIB_TCPEXTABLE *pTcpTable,
BOOL bOrder