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

Void chttpServerView::OnToolsOptions()

{

// TODO: Add your command handler code here

CToolsOptions ctopt;

ctopt.m_LogFile=HTTPServer.TestLogFile;

if (ctopt.DoModal()==IDOK) HTTPServer.TestLogFile=ctopt.m_LogFile;

}

Для створення файлу звіту створимо клас CLogFile. Використовуючи це цей клас ми й будемо записувати інформацію до файлу.

class CLogFile

{

public:

CString csFileName;

BOOL Create();

BOOL Write(CString writeString);

CLogFile();

virtual ~CLogFile();

};

Підключимо його опис до реалізації класу CServerWinsock.

// ServerWinsock.h: interface for the CServerWinsock class.

//

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

#include <winsock.h>

#include "LogFile.h"

Об’явимо його у класі

class CServerWinsock

{

public:

CLogFile cLogFile;

. . . . . . . .

При ініціалізації у змінну класу CLogFile передаємо ім’я файлу

CServerWinsock::CServerWinsock()

{

TestLogFile=false;

cLogFile.csFileName=NAMEFILE;

cLogFile.Create();

}

Функція запису

BOOL CLogFile::Write(CString writeString)

{

CFile file(csFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite);

file.SeekToEnd();

file.Write((LPCTSTR)writeString, writeString.GetLength());

file.Close();

return true;

}

Також додамо функцію LogWrite до класу CServerWinsock.

Void cServerWinsock::LogWrite(cString csStr)

{

if (TestLogFile) {

cLogFile.Write((CTime::GetCurrentTime()).Format("%H:%M:%S - %A, %d %B %Y...."));

cLogFile.Write(csStr);

}

}

Замінюємо виклик усіх функцій AfxMessageBox на LogWrite. Ми постійно будемо розширювати кількість інформації, що буде додаватися до файлу звіту для вивчення процесу з’єднання і його процесу. Поки що там відображаються лише найбільш важливі події.

Приведемо файл звіту

08:21:40 - Friday, 07 December 2001....Initializing Winsock... Success!

08:21:40 - Friday, 07 December 2001....Function gethostname... Success!

Host name is "ABCXYZ"

08:21:40 - Friday, 07 December 2001....Creating socket... Success!

08:21:40 - Friday, 07 December 2001....Binding socket... Success!

08:21:40 - Friday, 07 December 2001....WSAAsyncSelect... Success!

08:21:40 - Friday, 07 December 2001....Listening port 8080... Success!

08:21:51 - Friday, 07 December 2001....Closing socket... Success!

08:21:51 - Friday, 07 December 2001....Cleanup Winsock... Success!

Крок 13 – Розширюємо інформативність файлу звіту

Отримати інформацію про Winsock.dll, яка використовується на вашому комп’ютері можна аналізуючи структуру WSADATA.

typedef struct WSAData {

WORD wVersion;

WORD wHighVersion;

char szDescription[WSADESCRIPTION_LEN+1];

char szSystemStatus[WSASYS_STATUS_LEN+1];

unsigned short iMaxSockets;

unsigned short iMaxUdpDg;

char FAR * lpVendorInfo;

} WSADATA;

wVersion – версія, підтримка якої очікується.

wHighVersion – максимальна версія, з якою можна працювати. За звичай вони співвпадають.

szDescriptionтекстовий рядок з описом

szSystemStatus – знову текстовий рядок з описом але цей рядок пов’язаний з операційною системою.

Останні нам не цікавлять, та у версії 2 і вище повинні ігноруватися.

Вносимо зміни до коду ініціалізації Winsock.

BOOL CServerWinsock::StartWinsock()

{

WSADATA wsaData;

CString csTmp;

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