Шаг 13 - Расширяем информативность LOG

Получить информацию о 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, FAR * LPWSADATA; 

wVersion - версия поддержка которой ожидается. Ведь можно поддерживать и младшую версию. wHighVersion - максимальная версия, с которой можно работать. Нормально когда они совпадают хотя и не обязаны. szDescription - текстовая строка с описанием. szSystemStatus - опять текстовая строка с описанием, но в приложении для типа операционной среды. С остальными сложнее, приложение должно проигнорировать iMaxsockets, iMaxUdpDg, и lpVendorInfo области в WSAData, если величина в wVersion после успешного вызова на WSAStartup в версии 2.

Я внес в код инициализации WinSock изменения:

BOOL CSeverWinSock::StartWinSock()
{
	if (WSAStartup(WINSOCK_VERSION, &wsaData)) 
	{
		AfxMessageBox("winsock not bi initialized !");
		LogsWrite("winsock not bi initialized !");
		WSACleanup();
		return FALSE;
	} 
	LogsWrite("Запуск WinSock");
	LogsWriteNotTime("Информация о WinSock.DLL"); 
	LogsWriteNotTime(wsaData.szDescription); 
	LogsWriteNotTime(wsaData.szSystemStatus);
	return TRUE;
}

Появилась функция LogsWriteNotTime, которая пишет в log файл без указания времени. Вот она:

void CSeverWinSock::LogsWriteNotTime(CString writeString)
{
	if (TestLogFile)
		cLogFile.write(writeString); 
}

Вносим пояснения в при получении имени хоста:

BOOL CSeverWinSock::SocketGetHostName()
{
	//......
	LogsWriteNotTime("Получаем имя хоста");
	LogsWrite(chInfo);
	//......
}

Дополнительная информация о создании сокета:

BOOL CSeverWinSock::CreateSocket()
{
	//......
	LogsWrite("Создали сокет");
	CString  temp;
	temp.Format(" %i", PORT_ADDR);
	LogsWriteNotTime("Порт " + temp);
	LogsWriteNotTime("Протокол по умолчанию ");
	//......
}

Так же я добавил фиксацию времени обращения клиента:

afx_msg LRESULT CHTTPServerView::OnServerAccept(WPARAM wParam, LPARAM lParam)
{
	//......
	HTTPServer.LogsWrite("Запрос соединение клиентом"); 
	//......
	closesocket(HTTPServer.clientsocket);
	HTTPServer.LogsWrite("Отсоединение клиента"); 
	//......
}

Конечно расширять информативность лога надо и дальше, но пока хватит :-) Вот как он уже выглядит !!!

09 : 45 :03
Запуск WinSock
Информация о WinSock.DLL
Microsoft wsock32.dll, ver2.2, 32bit of Apr 28 1998, at 19:33:24.
On Win95.
Получаем имя хоста
09 : 45 :03
Jana
09 : 45 :03
Создали сокет
Порт  80
Протокол по умолчанию 
09 : 45 :03
bind
09 : 45 :03
WSAAsyncSelect 
.......

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