- •Об'єктно-орієнтовані мови. Основні принципи об'єктно-орієнтованого програмування.
- •Відмінності мови Java від інших мов програмування
- •Основні типи даних мови Java.
- •Перетворення даних в програмах на Java.
- •Пакети класів, їх створення та використання.
- •Використання рядків в мові Java. Клас String.
- •Менеджери розташування. Їх призначення та використання Розкладки
- •FlowLayout (послідовне розташування)
- •GridLayout (табличне розташування)
- •BorderLayout (полярне розташування)
- •CardLayout (блокнотне розташування)
- •GridBagLayout (коміркове розташування)
- •Пакет java.Awt. Ієрархія класів в ньому. Клас Component.
- •Контейнери. Їх призначення та загальні методи контейнерів Контейнери
- •Загальні характеристика класу Component (див 13)
- •Використання контейнера Panel та основні його методи. Панель
- •Контейнер Frame, його особливості. Frame (Фрейми)
- •Графічні засоби мови Java. Клас Canvas.
- •Реалізація роботи прапорців та пермикачів. Checkbox (Прапорець та Перемикач)
- •Клас Graphics. Малювання графічних примітивів.
- •Виведення тексту. Клас Font.
- •Повідомлення та події. Поля та методи класу Event Класи подій
- •Обробка повідомлень миші. Основні методи.
- •Виведення растрових зображень. Класи Url та Image. Завантаження растрового зображення
- •Виведення зображення
- •Клас Image
- •Способи усунення мерехтіння при виведенні інформації на екран. Усунення мерехтіння
- •Потоки. Клас Thread.Створення потоків.
- •Створення потоків
- •Виняткові ситуації. Класи Throwable, Exception, Error. 29. Методи обробки виняткових ситуацій.
- •Аплети у порівнянні з додатками
- •Проблема безпеки
- •Включення аплетів в html-документ Створення аплетів
- •Введення-виведення даних. Базові класи введення-виведення
- •Дати порівняльну характеристику протоколів стеку tcp/ip та udp.
- •Створення сокетів tcp
- •4.3 Робота з потоковими сокетами
- •Клас Socket
- •Клас ServerSocket
- •Створення сокетів udp
- •Клас DatagramSocket
- •Клас DatagramPacket
- •Приклад серверного додатку, що реалізує датаграмний сокет.
- •Приклад клієнтського додатку, що реалізує датаграмний сокет.
Створення сокетів tcp
У бібліотеці класів Java є дуже зручний засіб, за допомогою якого можна організувати взаємодію між додатками Java і аплетами, що працюють як на одному і тому ж, так і на різних вузлах мережі TCP/IP. Це засіб, що народився в світі операційної системи UNIX, – так звані сокети (sockets).
Що таке сокети? Можна уявити собі сокети у вигляді двох розеток, в які включений кабель, призначений для передачі даних через мережу. Переходячи до комп'ютерної термінології, скажімо, що сокети – це програмний інтерфейс, призначений для передачі даних між додатками.
Перш ніж додаток зможе виконувати передачу або прийом даних, він повинен створити сокет, вказавши при цьому адресу вузла IP, номер порту, через який передаватимуться дані, і тип сокета.
З адресою вузла IP ми вже стикалися. Номер порту служить для ідентифікації додатку. Зауважимо, що існують так звані "добре відомі" (well known) номери портів, зарезервовані для різних додатків. Так, порт з номером 80 зарезервований для використання серверами Web при обміні даними через протокол HTTP.
Що ж до типів сокетів, то їх два – потокові і датаграмні.
За допомогою потокових сокетів ми можемо створювати канали передачі даних між двома додатками Java у вигляді потоків, які ми вже розглядали раніше. Потоки можуть бути:
вхідними або вихідними,
звичними або форматованими,
з використанням або без використання буферизації.
Організувати обмін даними між додатками Java з використанням потокових сокетів не важче, ніж працювати через потоки зі звичними файлами. Помітимо, що потокові сокети дозволяють передавати дані тільки між двома додатками, оскільки вони припускають створення каналу між цими додатками.
Проте іноді потрібно забезпечити взаємодію декількох клієнтських додатків з одним серверним або декількох клієнтських додатків з декількома серверними додатками. В цьому випадку можна або створювати в серверному додатку окремі задачі і окремі канали для кожного клієнтського додатку, або скористатися датаграмними сокетами. Датаграмні сокети дозволяють передавати дані відразу всім вузлам мережі, хоча така можливість рідко використовується і часто блокується адміністраторами мережі.
Для передачі даних через датаграмні сокети не потрібно створювати канал – дані посилаються безпосередньо тому додатку, для якого вони призначені з використанням адреси цього додатку у вигляді сокета і номера порту. При цьому один клієнтський додаток може обмінюватися даними з декількома серверними додатками або навпаки, один серверний додаток – з декількома клієнтськими.
На жаль, датаграмні сокети не гарантують доставку переданих пакетів даних. Навіть якщо пакети даних, передані через такі сокети, дійшли до адресата, не гарантується, що вони будуть одержані в тій самій послідовності, в якій були передані. Потокові сокети, навпаки, гарантують доставку пакетів даних, причому в правильній послідовності.
Причина відсутності гарантії доставки даних при використанні датаграмних сокетів полягає у використанні такими сокетами протоколу UDP, який, у свою чергу, заснований на протоколі з негарантованою доставкою IP. Потокові сокети працюють через протокол гарантованої доставки TCP.
Сокет (socket) – це описувач мережного з’єднання. Сокет TCP використовує протокол TCP, успадковуючи всі характеристики цього протоколу. Для створення сокета TCP необхідно мати таку інформацію:
IP-адреси клієнта та сервера;
порти, які використовують додатки на клієнтському та серверному боці.
Сервер – це комп’ютер, який очікує звертань від різних машин з запитом конкретних ресурсів. Відповідно клієнти – це комп’ютери які звертаються з цими запитами до сервера. Не слід думати, що сервер – це головний, а клієнт – це підлеглий. В принципі і клієнт, і сервер – рівноправні в тому сенсі, що і той, і інший можуть і пересилати, і отримувати дані. Але щоб відбулась телефонна розмова хтось має подзвонити (клієнт), а хтось має чергувати біля телефону і своєчасно зняти слухавку (сервер).
Щоб почати обмін через сокет, додаток-клієнт має прив’язатися до конкретного порта. Порт – це абстракція (до речі, як і сокет), яка дозволяє розділити різні додатки, що можуть входити до мережі з одного і того самого комп’ютера. Іншими словами, уявіть ситуацію, коли в багатозадачній системі з одного комп’ютера різні програми шлють запити і очікують відповіді. Як відрізнити, кому яка відповідь призначена? Щоб уникнути плутанини, різні додатки мають прив’язуватися до різних портів.
Ось ми і плавно переходимо від теорії до практики. Хто і як має визначати номери портів? Відповідь – сервер, а він має знати, як розподіляються номери портів. За загальноприйнятими погодженнями, це мають бути номери, більші за 1024.
