// 打印UDP监听表信息
PMIB_UDPTABLE pUdpTable = MyGetUdpTable(TRUE);
if(pUdpTable != NULL)
{
struct in_addr inadLocal;
printf("UDP TABLE\n");
printf("%20s %10s\n", "Loc Addr", "Loc Port");
for (UINT i = 0; i < pUdpTable->dwNumEntries; ++i)
{
inadLocal.s_addr = pUdpTable->table[i].dwLocalAddr;
// 打印出此入口的信息
printf("%20s %10u \n",
inet_ntoa(inadLocal), ntohs((unsigned short)(0x0000FFFF & pUdpTable->table[i].dwLocalPort)));
}
MyFreeUdpTable(pUdpTable);
}
return 0;
}
PMIB_TCPTABLE MyGetTcpTable(BOOL bOrder)
{
PMIB_TCPTABLE pTcpTable = NULL;
DWORD dwActualSize = 0;
// 查询所需缓冲区的大小
if(::GetTcpTable(pTcpTable, &dwActualSize, bOrder) == ERROR_INSUFFICIENT_BUFFER)
{
// 为MIB_TCPTABLE结构申请内存
pTcpTable = (PMIB_TCPTABLE)::GlobalAlloc(GPTR, dwActualSize);
// 获取TCP连接表
if(::GetTcpTable(pTcpTable, &dwActualSize, bOrder) == NO_ERROR)
return pTcpTable;
::GlobalFree(pTcpTable);
}
return NULL;
}
void MyFreeTcpTable(PMIB_TCPTABLE pTcpTable)
{
if(pTcpTable != NULL)
::GlobalFree(pTcpTable);
}
PMIB_UDPTABLE MyGetUdpTable(BOOL bOrder)
{
PMIB_UDPTABLE pUdpTable = NULL;
DWORD dwActualSize = 0;
// 查询所需缓冲区的大小
if(::GetUdpTable(pUdpTable, &dwActualSize, bOrder) == ERROR_INSUFFICIENT_BUFFER)
{
// 为MIB_UDPTABLE结构申请内存
pUdpTable = (PMIB_UDPTABLE)::GlobalAlloc(GPTR, dwActualSize);
// 获取UDP监听表
if(::GetUdpTable(pUdpTable, &dwActualSize, bOrder) == NO_ERROR)
return pUdpTable;
::GlobalFree(pUdpTable);
}
return NULL;
}
void MyFreeUdpTable(PMIB_UDPTABLE pUdpTable)
{
if(pUdpTable != NULL)
::GlobalFree(pUdpTable);
}