c++测试下载速度

FLOAT CAllapiDlg::InternetGetFile (CString szUrl,CString szFileName)
{
	DWORD dwFlags;
	InternetGetConnectedState(&dwFlags, 0);
	CHAR strAgent[64];
	sprintf(strAgent, "Agent%ld", timeGetTime());
	HINTERNET hOpen;
	if(!(dwFlags & INTERNET_CONNECTION_PROXY))
		hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
	else
		hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
	if(!hOpen)
	{
		AfxMessageBox("Internet连接错误!");
		return -1;
	}

	DWORD dwSize;
	CHAR   szHead[] = "Accept: */*\r\n\r\n";
	VOID* szTemp[16384];
	HINTERNET  hConnect;
	CFile file;
		FLOAT fSpeed = 0;

	if ( !(hConnect = InternetOpenUrlA ( hOpen, szUrl, szHead,
		 lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0)))
	{
	   AfxMessageBox("不能打开该URL!");
	   return -1;
	}

	if  (file.Open(szFileName,CFile::modeWrite|CFile::modeCreate)==FALSE )
	{
	   AfxMessageBox("不能打开本地的文件!");
	  return -1;
	}

	DWORD dwByteToRead = 0;
	DWORD dwSizeOfRq = 4;
	DWORD dwBytes = 0;

    if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, 
                  (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))
	{
		dwByteToRead = 0;
	}

	DWORD start;
	DWORD end;
	DWORD time;
	char tempstring[200];
	time = 10;
	start = timeGetTime();
	do
	{
		if (!InternetReadFile (hConnect, szTemp, 16384,  &dwSize))
		{
			AfxMessageBox("读文件出错!");
			file.Close();
			return -1;
		}
		if (dwSize==0)
			break;
		else
			file.Write(szTemp,dwSize);
		dwBytes+=dwSize;
		if(dwByteToRead)
		{
		//	tempstring.Format("%d%%",(dwBytes*100)/dwByteToRead);
		//	SetDlgItemText(IDC_PERCENT_TEXT,tempstring);
		}
	end = timeGetTime();
		time = end - start;
	 if(time>0 &&time %200==0)
	 {
	
		fSpeed = (float)dwBytes;
		fSpeed /= ((float)time)/1000.0;
		fSpeed /= 1024.0;
		//tempstring.Format("%dKB/s",fSpeed);
		//sprintf(tempstring,"%.2fKB/s",fSpeed);
	//	SetDlgItemText(IDC_SPEED_TEXT,tempstring);
	
	 }

	 if(dwBytes>256000) break;
	
		
	}while (TRUE);

	file.Close();
	InternetCloseHandle(hOpen);

	return fSpeed;
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值