Шаг 10 - Разбор строки статуса

К данному примеру относитесь очень осторожно :-). Я вынес его в отдельный файл, чтобы показать и потом вставить в сервер. Но разбор выражения хотя и сделан на рекурсивной основе далеко не идеален. Но это и не нужно в данный момент. Нам просто из запроса нужно выделить имя файла для чтения и это он делает. Хотя может в каких то случаях и ошибиться. Пишите свои замечания и комментарии. Вот код:

// teststr.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "afx.h"
#include "iostream.h"

void GetLine(CString Str);
void Command(CString Str);
void GetCommand(CString Str);

void main()
{
	CString s="GET /autor.htm HTTP/1.1\015\012 Accept: application/vnd.ms-excel, */*\015\012\015\012";
	GetLine(s);
	s="GET / HTTP/1.1\015\012 Accept: application/vnd.ms-excel, */*\015\012\015\012";
	GetLine(s);
	s="";
	GetLine(s);
	s="GET\015\012";
	GetLine(s);
}

void GetLine(CString Str)
{
	CString temp=Str;
	int i= Str.Find("\015\012");
	int l=Str.GetLength(); 
	Str.Delete(i,l-i);
	Command(Str);
	temp.Delete(0,i+2);  
	if (Str.GetLength() !=0)
	{
		if (temp.GetLength()!=0)  GetLine(temp);
	}
}

void Command(CString Str)
{
	if (Str.Find("GET",0)!=-1)  GetCommand(Str);
}

void 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);
		cout << Str << endl;
	}
}

Как видите я привел несколько примеров для того, чтобы убедиться, что он работает. Рекурсивно разбирается вся строка, выделяются строки (CRLF) каждая строка анализируется на наличие GET при его наличии она обрезается с обоих сторон для извлечения имени файла. В следующем шаге я просто вставлю эти функции в виде класса в проект. Меня больше интересует, что сервер выдаст строку по запросу и мы обработаем GET.

Написать свой сервер это одно :-)) и требует тщательного кодирования. А вот понимание принципов работы это другое. Мы занимаемся этим я хочу сказать...


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