Адресація і створення сокета МЕТОДИЧНІ ВКАЗІВКИ до виконання лабораторних робіт з дисципліни “ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ КОМП’ЮТЕРНИХ МЕРЕЖ” для студентів напряму підготовки 6.050103 „Програмна інженерія" спеціальності 6.080400 „Програмне забезпечення автоматизованих систем" усіх форм навчання. Затверджено на засіданні кафедри програмного забезпеченя автоматизованих систем, протокол № ___ від __________р., та Методичною радою ЧДТУ, протокол № _______від _________ р. Укладачі: Пальонний Ю.М., асистент, Гузнін С.С..,ст. викладач, Журавель П.Д., асистент РецензентШадхін В.Ю., к.т.н., доцент Методичні вказівки до виконання лабораторних робіт з дисципліни " ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ КОМП’ЮТЕРНИХ МЕРЕЖ" для студентів напряму підготовки 6.050103 „Програмна інженерія" спеціальності 6.080400 „Програмне забезпечення автоматизованих систем" [Текст] / Укл. ПальоннийЮ.М., Гузнін С.С.; Журавель П.Д., М-во освіти і науки України, Черкас. держ. технол. ун-т. – Черкаси : чдту, 2013. –с. Видання містить теоретичні положення та рекомендації щодо вивчення основних тем і виконання лабораторних робіт з дисципліни " Програмне забезпечення комп’ютерних мереж ". ВСТУП Останнім часом різко зріс інтерес до програмування. Це пов'язано з розвитком і впровадженням в повсякденне життя інформаційно-комунікаційних технологій. Якщо людина має справу з комп'ютером, то рано чи пізно у нього виникає бажання, а іноді і необхідність, програмувати. Серед користувачів персональних комп'ютерів нині найбільш популярне сімейство операційних систем Windows і, природно, що той, хто збирається програмувати, прагне писати програми, які працюватимуть в цих системах. Бурхливий розвиток обчислювальної техніки та комп’ютерних мереж, потребу в ефективних засобах розробки програмного забезпечення привели до появи систем програмування, орієнтованих на так звану "швидку розробку", серед яких можна виділити Borland Delphi, Microsoft Visual Basic та Microsoft Visual С. ЛАБОРАТОРНА РОБОТА № 1 (4 години) Тема: Клієнт-серверна взаємодія за допомогою сокетів в режимі TCP-з'єднання Мета: Практичне освоєння механізму сокетів. Побудові TCP-з'єднань для взаємодії між процесами програм Клієнта і Сервера в моделі "Клієнт-сервер" Короткі теоретичні відомості: Існує дві моделі взаємодії між процесами в мережі: модель з’єднання з протоколом TCP (Transmission Control Protocol) і модель дейтаграм з протоколом UDP (User Datagram Protocol). У даній лабораторній роботі використовується перша з названих моделей. Нижче наводяться основні кроки і необхідні системні виклики для виконання основних етапів при роботі з сокетами в режимі TCP-з'єднання. Адресація і створення сокета Сукупна інформація про адресу, порт програми-адресата (абонента), моделі з'єднання, протокол взаємодії становить т.зв. сокет (кінцева абонентська точка) і формально являє собою структуру даних. Існує кілька видів сокетів: · узагальнений сокет (generic socket), визначається у файлі <sys/socket.h>: struct sockaddr { u_char sa_family; / * Сімейство адрес (домен) * / char sa_data [];}; / * Адреса сокету * / · Сокети для зв'язку через мережу, визначається у файлі <netinet/in.h>: struct sockaddr_in { u_char sin_len; / * Довжина поля sockaddr_in (для FreeBSD) * / u_char sin_family; / * Сімейство адрес (домен) * / u_short sin_port; / * Номер порту * / struct in_addr sin_addr; / * IP-адреса * / char sin_zero [8];}; / * Поле вирівнювання * / де struct in_addr { n_int32_t s_addr}. Створюється сокет за допомогою системного виклику socket (). # Include <sys/socket.h> int socket (int domain, int type, in t protocol); · Параметр domain - домен зв'язку, в якому буде використовуватися сокет (значення AF_INET - для домену Internet (з'єднання через мережу), AF_UNIX - домен, якщо процеси перебувають на одному і тому ж комп'ютері); · Параметр type визначає тип створюваного сокета (значення SOCK_STREAM - для режиму сполук, SOCK_DGRAM - для режиму дейтаграм); · Параметр protocol визначає використовуваний протокол (у разі protocol = 0 за замовчуванням для сокета типу SOCK_STREAM буде використовувати протокол TCP, а сокета типу SOCK_DGRAM - протокол UDP). При програмуванні TCP-з'єднання повинні бути створені сокети (системний виклик socket ()) і в програмі сервера, і в програмі клієнта, при цьому в обох програмах сокети зв'язуються з адресою машини, на яку буде встановлена програма сервера. Але, якщо в програмі сервера для визначення IP-адреси в структурі сокета може бути використана змінна INADDR_ANY, то в програмі клієнта для занесення в структуру сокета IP-адреси машини сервера необхідно використовувати системний виклик inet_addr (). Мережеві виклики inet_addr () і inet_ntoa () виконують перетворення IP-адреси з формату текстового рядка "xyzt" в структуру типу in_addr і назад. # Include <arpa/inet.h> in_addr_t inet_addr (const char * ip_address); char * inet_ntoa (const struct in_addr in); Для того щоб процес міг посилатися на адресу свого комп'ютера, файлі <netinet/in.h> визначена змінна INADDR_ANY, що містить локальний адресу комп'ютера у форматі in_addr_t. Зв'язування Системний виклик bind () пов'язує мережеву адресу комп'ютера з ідентифікатором сокета. # Include <sys/types.h> # Include <sys/socket.h> int bind (int sockfd, const struct sockaddr * address, size_t add_len); · sockfd - дескриптор файлу сокета, створеним за допомогою виклику socket (), · address - покажчиком на узагальнену структуру адреси сокета, до якої перетвориться структура sockaddr_in, у разі передачі даних через мережу. · size_t add_len - розмір зазначеної структури адреси сокета. У разі успішного завершення виклику bind () він повертає значення 0. У випадку помилки, наприклад, якщо сокет для цієї адреси вже існує, виклик bind () повертає значення -1. Змінна errno буде мати при цьому значення EADDRINUSE. Операція зв'язування виконується тільки в програмі сервера. |