Шаг 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
..........
Загрузить проект |
Предыдущий шаг |
Следующий Шаг |
Оглавление By Artem.
Используются технологии uCoz
|