ClientSocket работает на низком уровне (т.е напрямую по TCP), а файлик лежит в WEB. Думаю нужно использовать библиотеку WinInet.
Вот кусок кода осуществляющий скачку с Web используя WinInet
Код:
DWORD WINAPI DownloadThread(LPVOID lpParam)
{
DOWNLOAD_DATA data = *(DOWNLOAD_DATA *)lpParam;
HINTERNET hInetSession;
HINTERNET hInetFile;
HANDLE hFile;
OVERLAPPED ovlp;
DWORD dwOffset = 0;
DWORD dwRead;
TCHAR ReadBuf[4*1024];
lstrcpy((LPTSTR)&data, NULL);
hInetSession = InternetOpen("Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)",
PRE_CONFIG_INTERNET_ACCESS, NULL, NULL, 0);
if(hInetSession == NULL)
{
WritePrivateProfileString(data.FileName, "URL", data.Url, IniFile);
data.sock->SendFormatText(0, "INET_OPEN_ERROR\r\n%li", GetLastError());
return -1;
}
hInetFile = InternetOpenUrl(hInetSession, data.Url, NULL, 0, 0, NULL);
if(hInetFile == NULL)
{
WritePrivateProfileString(data.FileName, "URL", data.Url, IniFile);
data.sock->SendFormatText(0, "INET_OPEN_URL_ERROR\r\n%li", GetLastError());
return -1;
}
hFile = CreateFile(data.FullFileName,
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(BAD_HANDLE(hFile))
{
data.sock->SendFormatText(0, "SAVE_FILE_OPEN_ERROR\r\n%li", GetLastError());
InternetCloseHandle(hInetSession);
InternetCloseHandle(hInetFile);
return -1;
}
if(data.dwOffset == 1)
InternetSetFilePointer(hInetFile, GetFileSize(hFile, NULL), NULL, FILE_BEGIN, 0);
data.sock->SendFormatText(0, "DOWNLOAD_BEGIN\r\n%s", data.FileName);
do
{
InternetReadFile(hInetFile, ReadBuf, sizeof(ReadBuf), &dwRead);
if(dwRead >= 0)
{
ovlp.hEvent = NULL;
ovlp.OffsetHigh = NULL;
ovlp.Offset = GetFileSize(hFile, NULL);
WriteFile(hFile, ReadBuf, dwRead, NULL, &ovlp);
dwOffset += dwRead;
}
else
{
InternetCloseHandle(hInetSession);
InternetCloseHandle(hInetFile);
hInetSession = InternetOpen("Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)",
PRE_CONFIG_INTERNET_ACCESS, NULL, NULL, 0);
if(hInetSession == NULL)
{
WritePrivateProfileString(data.FileName, "URL", data.Url, IniFile);
data.sock->SendFormatText(0, "INET_OPEN_ERROR\r\n%li", GetLastError());
CloseHandle(hFile);
return -1;
}
hInetFile = InternetOpenUrl(hInetSession, data.Url, NULL, 0, 0, NULL);
if(hInetFile == NULL)
{
WritePrivateProfileString(data.FileName, "URL", data.Url, IniFile);
data.sock->SendFormatText(0, "INET_OPEN_URL_ERROR\r\n%li", GetLastError());
CloseHandle(hFile);
InternetCloseHandle(hInetSession);
return -1;
}
InternetSetFilePointer(hInetFile, dwOffset, NULL, FILE_BEGIN, NULL);
}
}
while(dwRead);
CloseHandle(hFile);
InternetCloseHandle(hInetSession);
InternetCloseHandle(hInetFile);
data.sock->SendFormatText(0, "DOWNLOAD_END\r\n%s", data.FileName);
return 1;
}
|