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

If (wsaStartup(winsock_version, &wsaData))

{

LogWrite("Initializing Winsock... Failed!\n");

return FALSE;

}

csTmp.Format("Initializing Winsock... Success!\n\n%s\n%s\n\n",

wsaData.szDescription,wsaData.szSystemStatus);

LogWrite(csTmp);

return TRUE;

}

І до SocketGetHostName.

BOOL CServerWinsock::SocketGetHostName()

{

. . . . . . .

LogWrite("Function gethostname... Success!\n");

csTmp.Format("Host name is \"%s\"\n",chInfo);

LogWrite(csTmp);

. . . . . . .

}

Також додамо код для того щоб бачити коли і який клієнт звернувся.

afx_msg LRESULT CHTTPServerView::OnServerAccept(WPARAM wParam, LPARAM lParam)

{

. . . . .

HTTPServer.LogWrite("Accepting connection...\n");

Invalidate();

. . . . .

if (WSAGETSELECTEVENT(lParam) == FD_ACCEPT)

{

. . . . . .

CString csTmp;

HTTPServer.LogWrite("Accepted connection...\n");

csTmp.Format("Remote Addr: %s:%hu\n",

inet_ntoa( socketclientaddr.sin_addr),

ntohs(socketclientaddr.sin_port));

HTTPServer.LogWrite(csTmp);

. . . . . .

closesocket(HTTPServer.clientsocket);

HTTPServer.LogWrite("Client Disconnected!\n");

}

return 0L;

}

Можні звичайно ж і далі, але поки вже досить. Ось як тепер виглядає наш файл звіту.

09:24:45 - Friday, 07 December 2001.... Initializing Winsock... Success!

Microsoft wsock32.dll, ver2.2, 32bit of Apr 22 1999, at 20:29:32.

On Win95.

09:24:45 - Friday, 07 December 2001.... Function gethostname... Success!

09:24:45 - Friday, 07 December 2001.... Host name is "sergey"

09:24:45 - Friday, 07 December 2001.... Creating socket... Success!

09:24:45 - Friday, 07 December 2001.... Binding socket... Success!

09:24:45 - Friday, 07 December 2001.... WSAAsyncSelect... Success!

09:24:45 - Friday, 07 December 2001.... Listening port 8080... Success!

09:24:56 - Friday, 07 December 2001.... Accepting connection...

09:24:56 - Friday, 07 December 2001.... Accepted connection...

09:24:56 - Friday, 07 December 2001.... Remote Addr: 127.0.0.1:1030

09:24:56 - Friday, 07 December 2001.... Client Disconnected!

09:25:01 - Friday, 07 December 2001.... Closing socket... Success!

09:25:01 - Friday, 07 December 2001.... Cleanup Winsock... Success!

Крок 14 – ФункціїWinsock

Функції Берклі

Описані нижче функції блокують WinSock API при виконанні.

accept

створює новий сокет і підключає його до віддаленого комп’ютеру

closesocket

закриває одну зі сторін з’єднання

connect

ініціалізує з’єднання зі сторони вказаного

сокету

recv

приймає дані від з’єднаного сокету

recfrom

приймає дані від з’єднаного або не

з’єднаного сокету

select

керування станом кількох сокетів

send

відсилає дані по з’єднаному сокету

sendto

відсилає дані по з’єднаному або

не з’єднаному сокету

А ось ці не блокують

bind

зв’язує локальний адрес з сокетом

getpeername

отримує назву точки, з якою сокет

з’єднаний

getsockname

отримує локальне ім’я сокету

getsockopt

отримує додаткову інформацію,

поєднану з сокетом

htonl

перетворює 32 бітне слово з порядку

байтів хоста до мережного порядку байтів

htons

перетворює 16 бітне слово з порядку

байтів хоста до мережного порядку байтів

inet_addr

перетворює рядок з IP адресою

у бінарний вигляд для структури IN_ADDR

inet_ntoa

перетворює IP адресу з бінарного вигляду

у рядок

ioctlsocket

керування параметрами сокету

listen

переводить сокет у стан, у якому він

чекає на з’єднання

ntohl

перетворює 32 бітне слово з

мережного порядку байтів до порядку байтів

хоста

ntohs

перетворює 16 бітне слово з

мережного порядку байтів до порядку байтів

хоста

setsockopt

задає опції сокету

shutdown

відключає передачу або прийом у сокету

socket

створює сокет

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