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

Сергій Лещенко

ОСНОВИ

РОБОТИ

З

Winsock

за 14 кроків

ЗМІСТ

Крок 1 – Що таке Windows Sockets 4

Крок 2 – Ініціалізація 5

Крок 3 – Отримання імені хоста 8

Крок 4 – Створюємо сокет 9

Крок 5 – Зв’язок сокету з портом 11

Крок 6 – Зв’язок вікна з сокетом для отримання повідомлень 14

Крок 7 – Сокет, що очікує 18

Крок 8 – З’єднання з сервером 19

Крок 9 – Відсилаємо документ 27

Крок 10 – Порядок байтів 29

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

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

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

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

Крок 1 – Що такеWindows Sockets

Winsock або Windows sockets – це програмний інтерфейс (API) розроблений для реалізації програмного забезпечення в мережі на основі протоколу TCP/IP. Тобто це є просто група функцій. Усі ці функції знаходяться у системній бібліотеці WSOCK32.DLL, яка динамічно завантажується.

Програма

WSOCK32.DLL

TCP/IP

Практично це є інтерфейс до протоколу TCP/IP.

При взаємодії клієнт – сервер у мережі, кожного учасника взаємодії можна розглядати як кінцеву точку. Сокет це начебто як і є ця кінцева точка. У програмі ви визначаєте сокет. І хоча програмування сокетів під UNIX і Windows схоже, ми будемо розглядати саме Windows sockets.

До речі Windows sockets розроблялися на основі інтерфейсу сокетів Берклі для UNIX, але до них були додані функції підтримки подій Windows.

Є дві версії Winsock:

  • Winsock 1.1 – підтримка тільки TCP/IP

  • Winsock 2.0 – підтримка додаткового програмного забезпечення

Специфікація Winsock поділяє функції на три типи.

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

  2. Інформаційні функції (отримання інформації про найменування доменів, служби, протоколи Internet

  3. Розширення Windows для функцій Берклі

Усі функції можуть бути як ті що блокують так не блокують. Звичайно ті функції що блокують це функції Берклі. Тобто при роботі такої функції не можна виконувати інші функції Winsock.

Давайте розглянемо як робиться підключення до сервера. Спочатку програма підключається к адресу IP зі створенням сокету. Програма буде чекати підключення. Для підключення програма клієнт також створює сокет і намагається підключитися до сокету сервера. Як тільки сервер побачить спробу підключення він створює новий сокет, і цей новий сокет буде використовуватися для взаємодії з клієнтом. А той, до якого була спроба підключення буде чекати наступного. На цій основі робиться взаємодія сервера і багатьма програмами.

Сам сокет може бути створений на основі протоколу

  1. TCP (transport control protocol) – надійне з’єднання

  2. UDP (user datagram protocol) – ненадійне з’єднання

Крок 2 – Ініціалізація

Створіть проект Win32 Console з ім’ям Winsock1, на питання про тип у діалоговому вікні вкажіть “Hello Wordapplication. Після цього є необхідність підключення LIB файлу. Це робиться у меню Project, далі Link і Object/Library modules. Туди треба вписати Wsock32.lib. Ось як це повинно виглядати.

А ось і код програми.

#include "stdafx.h"

#include "winsock.h"

const int WINSOCK_VERSION=0x0101;

int main(int argc, char* argv[])

{

WSADATA wsaData;

if (WSAStartup(WINSOCK_VERSION, &wsaData))

printf("Startup Winsock... Failed!\n");

else

printf("Startup Winsock... Success!\n");

if (WSACleanup())

printf("Cleanup Winsock... Failed!\n");

else

printf("Cleanup Winsock... Success!\n");

return 0;

}

За допомогою #includewinsock.h” підключаємо бібліотечні функції. Об’являємо константу з номером версії, котру ми будемо підтримувати - WINSOCK_VERSION.

Функція WSAStartup ініціалізує Winsock. Цю функцію треба викликати завжди перед тим як користуватися іншими функціями Winsock. Ось як вона описана.

int WSAStartup (

WORD wVersionRequested,

LPWSADATA lpWSAData );

Перший параметр – це версія, котра буде використовуватися. Молодший байт основна версія, старший байт розширення версії. Якщо ініціалізація не відбулася, то повернеться нульове значення. Взагалі ініціалізація полягає у зіставленні номера версії і реально існуючої 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 iMaxUpdDg;

char far * lpVendorInfo;

} WSADATA, FAR * LPWSADATA;

Функція WSACleanup завершує використання даної DLL і перериває звернення до функцій Winsock. При вдалому виконанні повертає нуль. Цю функцію потрібно викликати рівно стільки, скільки раз була викликана функція WSAStartup.

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