设为首页 加入收藏

TOP

VC++实现TCP与UDP链接(四)
2013-04-24 12:11:47 来源: 作者: 【 】 浏览:940
Tags:实现 TCP UDP 链接

 

  } TCPHeader, *PTCPHeader;</p><p>typedef struct _UDPHeader

  {

  USHORT   sourcePort;  // 源端口号

  USHORT   destinationPort;// 目的端口号

  USHORT   len;   // 封包长度

  USHORT   checksum;  // 校验和

  } UDPHeader, *PUDPHeader;</p><p>#endif // __PROTOINFO_H__

  </p>#include <stdio.h>

  #include <windows.h>

  #include <Iphlpapi.h>

  #pragma comment(lib, "Iphlpapi.lib")

  #pragma comment(lib, "WS2_32.lib")

  PMIB_TCPTABLE MyGetTcpTable(BOOL bOrder);

  PMIB_UDPTABLE MyGetUdpTable(BOOL bOrder);

  void MyFreeTcpTable(PMIB_TCPTABLE pTcpTable);

  void MyFreeUdpTable(PMIB_UDPTABLE pUdpTable);

  int main()

  {

  // 打印TCP连接表信息

  PMIB_TCPTABLE pTcpTable = MyGetTcpTable(TRUE);

  if(pTcpTable != NULL)

  {

  char    strState[128];

  struct  in_addr    inadLocal, inadRemote;

  DWORD   dwRemotePort = 0;

  char    szLocalIp[128];

  char    szRemIp[128];

  printf("TCP TABLE\n");

  printf("%20s %10s %20s %10s %s\n", "Loc Addr", "Loc Port", "Rem Addr",

  "Rem Port", "State");

  for(UINT i = 0; i < pTcpTable->dwNumEntries; ++i)

  {

  // 状态

  switch (pTcpTable->table[i].dwState)

  {

  case MIB_TCP_STATE_CLOSED:

  strcpy(strState, "CLOSED");

  break;

  case MIB_TCP_STATE_TIME_WAIT:

  strcpy(strState, "TIME_WAIT");

  break;

  case MIB_TCP_STATE_LAST_ACK:

  strcpy(strState, "LAST_ACK");

  break;

  case MIB_TCP_STATE_CLOSING:

  strcpy(strState, "CLOSING");

  break;

  case MIB_TCP_STATE_CLOSE_WAIT:

  strcpy(strState, "CLOSE_WAIT");

  break;

  case MIB_TCP_STATE_FIN_WAIT1:

  strcpy(strState, "FIN_WAIT1");

  break;

  case MIB_TCP_STATE_ESTAB:

  strcpy(strState, "ESTAB");

  break;

  case MIB_TCP_STATE_SYN_RCVD:

  strcpy(strState, "SYN_RCVD");

  break;

  case MIB_TCP_STATE_SYN_SENT:

  strcpy(strState, "SYN_SENT");

  break;

  case MIB_TCP_STATE_LISTEN:

  strcpy(strState, "LISTEN");

  break;

  case MIB_TCP_STATE_DELETE_TCB:

  strcpy(strState, "DELETE");

  break;

  default:

  printf("Error: unknown state!\n");

  break;

  }

  // 本地地址

  inadLocal.s_addr = pTcpTable->table[i].dwLocalAddr;

  // 远程端口

  if (strcmp(strState, "LISTEN") != 0)

  {

  dwRemotePort = pTcpTable->table[i].dwRemotePort;

  }

  else

  dwRemotePort = 0;

  // 远程IP地址

  inadRemote.s_addr = pTcpTable->table[i].dwRemoteAddr;

  strcpy(szLocalIp, inet_ntoa(inadLocal));

  strcpy(szRemIp, inet_ntoa(inadRemote));

  printf("%20s %10u %20s %10u %s\n",

  szLocalIp,  ntohs((unsigned short)(0x0000FFFF & pTcpTable->table[i].dwLocalPort)),

  szRemIp, ntohs((unsigned short)(0x0000FFFF & dwRemotePort)),

  strState);

  }

  MyFreeTcpTable(pTcpTable);

  }

  printf(" \n\n");

        

首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC++基于LSP拦截数据封包 下一篇VC++实现获取DNS服务器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: