Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


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

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:19, 15-04-2010 | #2