В прошлый раз я обещал интегрировать разбор строки в проект и я это сделал. Создал новый класс.
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 мы еще не разобрались. Только пробуем.