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






3.89/5 (7投票s)
一个非常小的类,用于获取您正在打开的当前网页的网络速度。

引言
这个小类用于帮助您查找当前网页的速度。您可以将此功能添加到您自己的网络浏览器中。许多浏览器用户声称拥有此功能。所以我编写了一个简单的版本。如果您有更好的方法来实现它,请告诉我。我将不胜感激。
背景
当我们打开一个网页时,我们不想等待太久才能打开它,其他页面也有相同的内容。现在,这个类可以帮助您决定是否切换到另一个页面。
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日:初始发布