//
//功能:从网上下载文件并保存到本地
/
int CMyFun::InternetGetFile(CString szUrl, CString szFileName)
{
szUrl.Format("%s",_T("http://www.houg.cn/Download/houggame.exe"));
DWORD dwFlags;
//返回本地系统的网络连接状态。
/*
INTERNET_CONNECTION_LAN 局域网
INTERNET_CONNECTION_MODEM 拨号上网
INTERNET_CONNECTION_PROXY 代理
INTERNET_CONNECTION_MODEM_BUSY 代理被占用
INTERNET_CONNECTION_CONFIGURED 虽然可以联网,但当前不可用
INTERNET_CONNECTION_OFFLINE 离线
INTERNET_RAS_INSTALLED RAS安装
*/
bool bInternet=InternetGetConnectedState(&dwFlags, 0);
if (!bInternet)
{
AfxMessageBox(_T("当前计算机连接公网失败"));
}
//这个必须得这样写
//BOOL bConnected = InternetCheckConnection(szUrl, FLAG_ICC_FORCE_CONNECTION, 0);
BOOL bConnected = InternetCheckConnection(_T("http://www.houg.cn"), FLAG_ICC_FORCE_CONNECTION, 0);
if (!bConnected)
{
AfxMessageBox(_T("服务器未开启"));
}
/*
InternetOpen:
函数作用:初始化一个应用程序,以使用WinINet 函数。
参数一:指向一个空结束的字符串,该字符串指定的应用程序或实体调用WinInet函数的名称。使用此名称作为用户代理的HTTP协议。
*/
CHAR strAgent[64];
memset(strAgent,0,sizeof(strAgent));
sprintf(strAgent, "Agent%ld", timeGetTime());
HINTERNET hOpen;
if(!(dwFlags & INTERNET_CONNECTION_PROXY))
hOpen = InternetOpen(strAgent, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
else
hOpen = InternetOpen(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(!hOpen)
{
return -1;
}
DWORD dwSize;
CHAR szHead[] = "Accept: */*\r\n\r\n";
VOID* szTemp[16384];
HINTERNET hConnect;
CFile file;
/*InternetOpenUrl:
函数作用:通过一个完整的FTP,Gopher或HTTP网址打开一个资源。
*/
if ( !(hConnect = InternetOpenUrl( hOpen, szUrl, szHead,
lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0)))
{
InternetCloseHandle(hOpen);
return -1;
}
if (file.Open(szFileName,CFile::modeWrite|CFile::modeCreate)==FALSE )
{
return -1;
}
DWORD dwByteToRead = 0;
DWORD dwSizeOfRq = 4;
DWORD dwBytes = 0;
/*HttpQueryInfo函数:
服务器会把该文件信息返回给你,其中包括大小啊、更新时间啊(如果有更新时间的话)、类型啊等等
*/
if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
(LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))
{
dwByteToRead = 0;
}
memset(szTemp,0,sizeof(szTemp));
do
{
if (!InternetReadFile (hConnect, szTemp, 16384, &dwSize))//每次传16KB
{
file.Close();
return -1;
}
if (dwSize==0)
break;
else
file.Write(szTemp,dwSize);
}while (TRUE);
file.Close();
InternetCloseHandle(hConnect);
InternetCloseHandle(hOpen);
return 0;
}