65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单类,用于获取当前网页的网络速度

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.89/5 (7投票s)

2010年4月5日

CPOL

1分钟阅读

viewsIcon

20903

downloadIcon

811

一个非常小的类,用于获取您正在打开的当前网页的网络速度。

netspeed.jpg

引言

这个小类用于帮助您查找当前网页的速度。您可以将此功能添加到您自己的网络浏览器中。许多浏览器用户声称拥有此功能。所以我编写了一个简单的版本。如果您有更好的方法来实现它,请告诉我。我将不胜感激。

背景

当我们打开一个网页时,我们不想等待太久才能打开它,其他页面也有相同的内容。现在,这个类可以帮助您决定是否切换到另一个页面。

Using the Code

将这两个文件添加到您的项目中,“CurNetSpeed.cpp”和“CurNetSpeed.h”。

在您想要调用它的地方包含头文件。然后按照以下步骤操作

//Step 1:

#include "CurNetSpeed.h"
...
//Step 2:
BOOL CTestNetSpeedDemoDlg::OnInitDialog()
{
...
	if(!m_cns.Init ())
		AfxMessageBox("Init failed!");
...
}
//Step3:
void CTestNetSpeedDemoDlg::OnTest() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	GetDlgItem(IDC_STATIC1)->SetWindowText
		(m_cns.GetCurWebTime (m_url.GetBuffer (512)));
}

如果您想使用它,只需查看类的头部即可。

class CCurNetSpeed  
{
public:
	char * GetCurWebTime(char *url);
	BOOL Init();
	CCurNetSpeed();
	virtual ~CCurNetSpeed();
private:
	char * GetState(int time);
	USHORT checksum(USHORT   *buffer, int size);
	void fill_icmp_data(char* icmp_data,int datasize);
	char url[512];
		  WSADATA wsaData;   
	  SOCKET   sockRaw;   
	  struct   sockaddr_in   dest,from;   
	  struct   hostent   *   hp;   
	  int bread,datasize;   
	  int fromlen ;   
	  int timeout;   
	  char   *dest_ip;   
	  char   *icmp_data;   
	  char   *recvbuf;   
	  unsigned   int   addr;   
	  USHORT   seq_no;   
    

  IpHeader   *iphdr;   
  IcmpHeader   *icmphdr;   
  unsigned   short   iphdrlen;   
  int time;
  int bwrote;
};

没有很多public 方法,您可以根据您的需求进行扩展。

代码原理

如何获取您正在打开的网页的速度?我对此进行了很多思考,但没有找到更好的方法。这个类使用了“Ping.exe”的代码。您想知道您的计算机的数据包到达Web服务器需要多长时间。只需ping服务器即可。ping命令将检索icmp消息,icmp消息具有时间戳,使用当前时间减去时间戳将得到经过的时间。

历史

  • 2010年4月5日:初始发布
© . All rights reserved.