Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpori_oop.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
441.86 Кб
Скачать
  1. Створення сокетів 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]