Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[MIT] / 14 steps.doc
Скачиваний:
17
Добавлен:
07.02.2016
Размер:
181.25 Кб
Скачать

If (bind(servsocket, (lpsockaddr) &socketaddr, sizeof(socketaddr)))

{

printf("Binding socket... Failed!\n");

return FALSE;

}

printf("Binding socket... Success!\n");

return TRUE;

}

Крок 11 – Чотири етапи транзакціїHTTP

Встановлення з’єднання

Перед обміном інформацією клієнт та сервер повинні мати з’єднання TCP

Запит клієнта

Кожний запит клієнта, який посилається до WEB- сервера, починається з метода (GET, POST, PUT, OPTIONS), за яким слідує URL об’єкту (наприклад http://localhost/) та символ повернення каретки з символом переводу рядку. Метод – це команда клієнту до сервера.

Відповідь сервера

Після отримання запиту сервер його аналізує і потрібну відповідь оформлює в повідомлення HTTP, яке він відсилає клієнту. Повідомлення HTTP (як запит так і відповідь) складається із двох частин – заголовку та тіла. Заголовок відповіді має вигляд: спочатку йде слово “HTTP/”, потім версія (наприклад HTTP/1.0, на даний момент є тільки дві версії 1.0 та 1.1), пробіл, потім – код статусу, десяткове число з трьома розрядами (наприклад 200, що значить – “усе гаразд”), потім знову пробіл і коментар сервера до коду статусу та символ повернення каретки з символом переводу рядку. Після заголовку йде пустий рядок, тобто знов пара символів - символ повернення каретки з символом переводу рядку. Потім йде документ у форматі HTML.

Наприклад:

HTTP/1.0_200_OK CRLF CRLF

(“_” означає пробіл, а CRLF символ – повернення каретки з символом переводу рядка)

Ось і в нас так

CString buff="HTTP/1.0 200 OK\n\n\

<HTML>\

<TITLE> Simple HTTP Server</TITLE>\

<BODY>\

<P>\

<FONT size=\"7\">Our Server Working Perfectly!!!\

</BODY>\

</HTML>";

HTTPServer.SendData(buff, buff.GetLength());

Розрив зв’язку

Після відправлення повідомлення сервер може розірвати зв’язок. У версії HTTP 1.0 це робиться завжди, а ось вже у версії HTTP 1.1 є параметр, що передається до сервера при запиті, який каже серверу щоб бажано було не обривати з’єднання.

Ми ж після кожної відправки повідомлення розриваємо зв’язок.

closesocket(HTTPServer.clientsocket);

Крок 12 – Робимо файл звіту

Першим ділом створимо пункт меню Tools->Options, де будемо вказувати усілякі опції, у тому числі і створення файлу звіту. Переходьте на меню у вкладці Resource і використовуйте ресурс IDR_MAINFRAME для редагування пунктів меню. Видаліть меню File і Edit.

Створимо реакцію на його вибір у класі CHTTPServerView.

Void chttpServerView::OnToolsOptions()

{

// TODO: Add your command handler code here

}

Треба створити діалогове вікно і створити для нього клас.

Встановити кнопку вибору Check Box і для неї створити змінну BOOL m_LogFile; У конструкторі вона ініціалізується так

CToolsOptions::CToolsOptions(CWnd* pParent /*=NULL*/)

: CDialog(CToolsOptions::IDD, pParent)

{

//{{AFX_DATA_INIT(CToolsOptions)

m_LogFile = FALSE;

//}}AFX_DATA_INIT

}

Заведемо змінну з ім’ям файлу

#define PORT_ADDR 8080

#define QUEUE_SIZE 50

#define NAMEFILE "HTTPServer.log"

class CServerWinsock

І у класі CServerWinsock змінну, яка буде вказувати на те, що потрібно вести файл звіту.

class CServerWinsock

{

public:

BOOL TestLogFile;

Початкова ініціалізація

CServerWinsock::~CServerWinsock()

{

TestLogFile = FALSE;

}

Додамо виклик діалогу, але спочатку підключимо файл класу діалогу у HTTPServerView.cpp.

#include “ToolsOptions.h”

/////////////////////////////////////////////////////////////////////////////

// CHTTPServerView

Соседние файлы в папке [MIT]