c++测试下载速度

  • Post author:
  • Post category:其他


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;
}



版权声明:本文为zzz_781111原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。