Шаг 11 - Отправка по гиперссылке

В прошлый раз я обещал интегрировать разбор строки в проект и я это сделал. Создал новый класс.

class CHeaderAnaliz  
{
public:
	CString GetFileName;
	CHeaderAnaliz();
	virtual ~CHeaderAnaliz();
	void GetLine(CString Str);
	void Command(CString Str);
	void GetCommand(CString Str);
};

Он практически ничем по логике не отличается от того, что делали в прошлый раз. Завел переменную, в которой будет находиться имя файла для отправки.

class CSeverWinSock  
{
	......
	CString GetFiles;
	.......
}

Теперь отправляется именно он:

afx_msg LRESULT CHTTPServerView::OnServerAccept(WPARAM wParam, LPARAM lParam)
{
	.......
	HTTPServer.SendFile(HTTPServer.GetFiles);
	.......

Добавил функцию, что мол разбирается заголовок при чтении:

BOOL CSeverWinSock::ReadDataClient()
{
	.......
	GetFileHeader(); 	
	.......
}

А вот и она

void CSeverWinSock::GetFileHeader()
{
	CString ss(bufferrecv);
	CHeaderAnaliz ch;
	ch.GetLine(ss); 
	if (ch.GetFileName!="")
		GetFiles="c:\\host\\"+ ch.GetFileName;
}

Так как переменная класса локальная и будет создаваться каждый раз при чтении, то инициализацию файла отправки я поместил сюда:

CHeaderAnaliz::CHeaderAnaliz()
{
	GetFileName="default.htm";
}

А в случае, если все-таки у нас чего-то попросили тогда вот как:

void CHeaderAnaliz::GetCommand(CString Str)
{
	int i=Str.Find("/");
	if (i != -1)
	{
		Str.Delete(0,i+1);
		i=Str.Find("HTTP");
		int l=Str.GetLength(); 
		Str.Delete(i,l-i);
		GetFileName=Str;
	}
}

Работает !!! Работает по гиперссылке. Попробуйте. Если есть неясности грузите проект. Хотя гиперссылка работает иногда не очень стабильно. Кеши всякие и так далее. Но и с HTTP мы еще не разобрались. Только пробуем.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 27.01.2000