CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

如何取得网络连接的上下行数据量,速度等信息

楼主binlyb007(滚来滚去)2006-03-14 23:53:11 在 VC/MFC / 网络编程 提问

跟windows的“连接状态”对话框中的内容一致,如连接状态,持续时间,速度,发送数据包,接收数据包数 问题点数:20、回复次数:4Top

1 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-15 10:49:06 得分 15

int   CStatFluxDlg::NewWork()  
  {  
  DWORD                                                     dwIndex;      
  DWORD                                                     dwNumber;      
  DWORD                                                     dwResult;      
  ULONG                                                     OutBufLen;      
  IP_ADAPTER_INFO             AdapterInfo;      
  PIP_ADDR_STRING             pAddrString;      
  PIP_ADAPTER_INFO         pAdapterNext;      
  MIB_IFROW                                     IfRow;      
  OutBufLen     =     sizeof(IP_ADAPTER_INFO);      
  dwResult         =     GetAdaptersInfo(&AdapterInfo,&OutBufLen);      
  if(dwResult     ==     ERROR_BUFFER_OVERFLOW)      
  {      
  GetAdaptersInfo(&AdapterInfo,&OutBufLen);      
  }      
  else     if                         (dwResult     !=     ERROR_SUCCESS)      
  {      
  printf("GetAdaptersInfo     Error:     %d\n",GetLastError());      
  return     FALSE;      
  }      
  printf("\t\t===     Network     Interface     ===\n\n");      
                        pAdapterNext     =     &AdapterInfo;      
                        while(pAdapterNext     !=     NULL)      
                        {      
                                                printf("AdapterName:\t         %s\n",pAdapterNext->AdapterName);      
                                                printf("Description:\t         %s\n",pAdapterNext->Description);      
                                                dwIndex     =     pAdapterNext->Index;      
                                                printf("Address:\t         ");      
                                for(dwNumber     =     0;dwNumber     <     pAdapterNext->AddressLength     -     1;     dwNumber++)      
                                                {      
                                                                        printf("%.2X-",pAdapterNext->Address[dwNumber]);      
                                                }      
                                                printf("%.2X\n",pAdapterNext->Address[dwNumber]);      
     
                                                printf("Type:\t\t         ");      
                                                switch(pAdapterNext->Type)      
                                                {      
                                                case     MIB_IF_TYPE_OTHER:      
                                                                        printf("Other\n");      
                                                                        break;      
                                                case     MIB_IF_TYPE_ETHERNET:      
                                                                        printf("Ethernet\n");      
                                                                        break;      
                                                case     MIB_IF_TYPE_FDDI:      
                                                                        printf("FDDI\n");      
                                                                        break;      
                                                case     MIB_IF_TYPE_PPP:      
                                                                        printf("PPP\n");      
                                                                        break;      
                                                case     MIB_IF_TYPE_LOOPBACK:      
                                                                        printf("LoopBack\n");      
                                                                        break;      
                                                case     MIB_IF_TYPE_SLIP:      
                                                                        printf("Slip\n");      
                                                                        break;      
                                                default:      
                                                                        printf("\n");      
                                                                        break;      
                                                }      
     
                                                printf("IpAddressList:\t         %s\t\t%s\n","IP     Address","Subnet     Mask");      
                                                pAddrString     =     &pAdapterNext->IpAddressList;      
                                                while(pAddrString     !=     NULL)      
                                                {      
                                                                        printf("\t\t         %-15s\t",pAddrString->IpAddress.String);      
                                                                        printf("%s\n",pAddrString->IpMask.String);      
                                                                        pAddrString     =     pAddrString->Next;      
                                                }      
     
                                                pAddrString     =     &pAdapterNext->GatewayList;      
                                                printf("GatewayList:\t         %s\n",pAddrString->IpAddress.String);      
                                                pAddrString     =     pAddrString->Next;      
                                                while(pAddrString     !=     NULL)      
                                                {      
                                                                printf("\t\t         %s\n",pAddrString->IpAddress.String);      
                                                                    pAddrString     =     pAddrString->Next;      
                                                }      
     
                                                if(pAdapterNext->DhcpEnabled     !=     0)      
                                                {      
                                                                        printf("DhcpServer:\t         %s\n",pAdapterNext->DhcpServer.IpAddress.String);      
                                                                        pAddrString     =     pAdapterNext->DhcpServer.Next;      
                                                                        while(pAddrString     !=     NULL)      
                                                                        {      
                                                                                                printf("\t\t\t         %s\n",pAddrString->IpAddress);      
                                                                                                pAddrString     =     pAddrString->Next;      
                                                                        }      
                                                }      
     
                                                if(pAdapterNext->HaveWins     !=     0)      
                                                {      
                                                                        printf("PrimaryWinsSvr:             %s\n",pAdapterNext->PrimaryWinsServer);      
                                                                        printf("SecondaryWinsSvr:     %s\n",pAdapterNext->SecondaryWinsServer);      
                                                }      
     
                                                printf("LeaseObtained:\t         %s",asctime(gmtime(&pAdapterNext->LeaseObtained)));      
                                                printf("LeaseExpires:\t         %s\n",asctime(gmtime(&pAdapterNext->LeaseExpires)));      
     
                                                IfRow.dwIndex     =     dwIndex;      
                                                if((dwResult         =     GetIfEntry(&IfRow))     !=     NO_ERROR)      
                                                {      
                                                                        printf("GetIfEntry     Error:     %d\n",dwResult);      
                                                                        break;      
                                                }      
     
                                                printf("MTU:\t\t         %d\n",IfRow.dwMtu);      
                                                printf("Speed:\t\t         %d     Kbps\n",IfRow.dwSpeed/1000);      
                                                printf("OperStatus:\t         ");      
                                                switch(IfRow.dwOperStatus)      
                                                {      
                                                case     MIB_IF_OPER_STATUS_NON_OPERATIONAL:      
                                                                        printf("LAN     Adapter     Disabled\n");      
                                                                        break;      
                                                case     MIB_IF_OPER_STATUS_UNREACHABLE:      
                                                                        printf("WAN     Adapter     Disconnected\n");      
                                                                        break;      
                                                case     MIB_IF_OPER_STATUS_DISCONNECTED:      
                                                                        printf("LAN     Adapters     Disconnected     or     WAN     Adapters     no     Carrier\n");      
                                                                        break;      
                                                case     MIB_IF_OPER_STATUS_CONNECTING:      
                                                                        printf("WAN     Adapter     Connecting\n");      
                                                                        break;      
                                                case     MIB_IF_OPER_STATUS_CONNECTED:      
                                                                        printf("WAN     Adapter     Connected\n");      
                                                                        break;      
                                                case     MIB_IF_OPER_STATUS_OPERATIONAL:      
                                                                        printf("LAN     Adapter     Default     Status\n");      
                                                                        break;      
                                                default:      
                                                                        printf("\n");      
                                                                        break;      
                                                }      
                                                printf("Unknown     Protocol:     %d\n\n",IfRow.dwInUnknownProtos);      
     
                                                printf("\t%12s%12s%10s\t%s\n","Unicast","NUnicast","Error","Bytes");      
                                                printf("%s\t%12d%12d%10d\t%d\n","Send:",IfRow.dwOutUcastPkts,IfRow.dwOutNUcastPkts,IfRow.dwOutErrors,IfRow.dwOutOctets);      
                                                printf("%s%12d%12d%10d\t%d\n","Receive:",IfRow.dwInUcastPkts,IfRow.dwInNUcastPkts,IfRow.dwInErrors,IfRow.dwInOctets);      
                                                printf("%s\t%12d%12d%10d\t%d\n","Total:",      
                                                                                    IfRow.dwInUcastPkts         +     IfRow.dwOutUcastPkts,      
                                                                                    IfRow.dwInNUcastPkts     +     IfRow.dwOutNUcastPkts,      
                                                                                    IfRow.dwInErrors                     +     IfRow.dwOutErrors,      
                                                                                    IfRow.dwInOctets                     +     IfRow.dwOutOctets);      
                                                     
                                                pAdapterNext     =     pAdapterNext->Next;      
                        }      
     
                        return     TRUE;      
  }  
  Top

2 楼WinEggDrop(WinEggDrop)回复于 2006-03-16 07:30:19 得分 5

有上面的数据,是可以得到数据,但是,象windows的连接接状态那里一样,如果流量超过一定量,看到的数据就会错误.你可以看上面的代码中的MIB_IFROW结构,基本都是DWORD类型,也就是说数据的记录超不过DWORD的最大上限,超过了,就会复位为0.我也测试过,事实上也真是这样.Top

3 楼gohappy_1999(碧水蓝天)回复于 2006-03-16 08:43:04 得分 0

gzTop

4 楼binlyb007(滚来滚去)回复于 2006-03-16 20:24:53 得分 0

我的项目中DWORD应该够用了,既然没人继续发表看法,就揭帖吧,就谢谢大家的关注Top

相关问题

  • SQL数据库存储大量数据,如何解决速度问题?
  • 数据库里数据量增大后,应用程序查询速度变慢
  • 怎么样加快DBGrid1显示数据速度???数据量有30万左右!!!
  • 大数据量时图形显示速度的优化,急!
  • 大批量数据导入Excel,如何加快速度
  • 求教!数据量大,网页浏览速度非常慢!!!
  • .net,大数据量,存贮过程,参数,速度,麻烦....
  • DataGrid中显示大量数据的,速度慢得出奇???
  • 海量数据联动如何加快运行速度?
  • 数据库大量查询和删除速度的讨论

关键词

  • 数据
  • 连接
  • ifrow
  • padapternext
  • paddrstring
  • dwnumber
  • printf
  • dwresult
  • outbuflen
  • dhcpserver

得分解答快速导航

  • 帖主:binlyb007
  • dragonzxh
  • WinEggDrop

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo