Опис соккетів на мові JAVA
Химия

Опис соккетів на мові JAVA


Завантажити реферат: Опис соккетів на мові JAVA

Сокети

Перш ніж програма зможе виконувати передачу або прийом даних, воно має створити сокет, вказавши при цьому адресу вузла IP, номер порту, через який будуть передаватися дані, і тип сокету.

З адресою вузла IP ви вже стикалися. Номер порту використовується для ідентифікації програми. Зауважимо, що є так звані «добре відомі» (well known) номери портів, зарезервовані для різних додатків. Наприклад, порт з номером 80 зарезервований для використання серверами Web під час обміну даними через протокол HTTP.

Що ж до типів сокетів, то їх два – потокові та датаграмні.

За допомогою потокових сокетів ви можете створювати канали передачі даних між двома програмами Java у вигляді потоків, які ми вже розглядали в другому розділі. Потоки можуть бути вхідними або вихідними, звичайними або форматованими з використанням або без використання буферизації. Скоро ви переконаєтеся, що організувати обмін даними між програмами Java з використанням потокових сокетів не важче, ніж працювати через потоки зі звичайними файлами.

Зауважимо, що потокові сокети дозволяють передавати дані тільки між двома програмами, оскільки вони припускають створення каналу між цими програмами. Однак іноді потрібно забезпечити взаємодію кількох клієнтських програм з одним серверним або кількох клієнтських програм з кількома серверними програмами. У цьому випадку ви можете створювати в серверному додатку окремі завдання та окремі канали для кожної клієнтської програми, або скористатися датаграмними сокетами. Останні дають змогу передавати дані відразу всім вузлам мережі, хоча така можливість рідко використовується і часто блокується адміністраторами мережі.

Для передачі даних через датаграмні сокети вам не потрібно створювати канал — дані надсилаються безпосередньо до того додатку, для якого вони призначені з використанням адреси цієї програми у вигляді сокета і номера порту. При цьому одна клієнтська програма може обмінюватися даними з декількома серверними програмами або навпаки, одна серверна програма — з кількома клієнтськими.

На жаль, датаграмні сокети не гарантують доставку пакетів даних, що передаються. Навіть якщо пакети даних, що передаються через такі сокети, дійшли до адресата, не гарантується, що вони будуть отримані в тій самій послідовності, в якій були передані. Потокові сокети, навпаки, гарантують доставку пакетів даних, причому у правильній послідовності.

Причина відсутність гарантії доставки даних при використанні датаграмних сокетів полягає у використанні такими сокетами протоколу UDP, який, у свою чергу, заснований на протоколі з негарантованою доставкою IP. Потокові сокети працюють через протокол гарантованої доставки TCP.

Клас Socket

Конструктори класу Socket

Найчастіше для створення сокетів у клієнтських програмах ви будете використовувати один із двох конструкторів, прототипи яких наведені нижче:

public Socket (String host, int port);

public Socket (InetAddress address, int port);

Перший з цих конструкторів дозволяє вказувати адресу серверного вузла у вигляді текстового рядка, другий — як посилання на об’єкт класу InetAddress. Другим параметром визначається номер порту, з використанням якого будуть передаватися дані.

У класі Socket визначено ще одну пару конструкторів, яка, проте, не рекомендується для використання:

public Socket(String host,

int port, boolean stream);

public Socket(InetAddress address,

int port, boolean stream);

У цих конструкторах останній параметр визначає тип сокету. Якщо цей параметр дорівнює true, створюється потоковий сокет, якщо false — датаграммный. Зауважимо, що з роботи з датаграмними сокетами слід використовувати клас DatagramSocket.

Методи класу Socket

Перерахуємо найцікавіші, з погляду, методи класу Socket.

Насамперед, це методи getInputStream і getOutputStream, призначені для створення вхідного та вихідного потоку, відповідно:

public InputStream getInputStream();

public OutputStream getOutputStream();

Ці потоки пов’язані з сокетом і мають бути використані передачі даних каналом зв’язку.

Методи getInetAddress і getPort дозволяють визначити адресу IP та номер порту, пов’язані з цим сокетом (для віддаленого вузла):

public InetAddress getInetAddress();

public int getPort();

Метод getLocalPort повертає для цього сокету номер локального порту:

public int getLocalPort();

Після того як робота із сокетом завершена, його необхідно закрити методом close:

public void close();

І, нарешті, метод toString повертає текстовий рядок, що представляє сокет:

public String toString();

Створення графічного оформлення

Програма має вигляд:

Опис соккетів на мові JAVA

Усі елементи вибираються з панелі інструментів наявних у програмі jBuilder v2.00. Для того щоб розмістити обраний елемент з панелі, достатньо виділити його одноразовим натисканням, і «розтягнути» до потрібних розмірів на робочому просторі (bevelPanel1)

Найвищий елемент, що містить текст localhost називається choiceControl. Це вікно вибору IP номера комп’ютера для зв’язку. Нижче наведено елемент textFieldControl, у ньому буде відображатися статус підключення. Ці елементи знаходяться на вкладці JBCL.

І нижні два вікна jTextArea служать передачі і прийому тексту. Але слід зазначити, що підписи до цих вікон “Send:” та “Reciev:” створюються окремим елементом textControl з панелі інструментів.

Ще є чотири елементи jButton із вкладки Swing. Дані кнопки можна сказати не відрізняються від кнопок вкладки JBCL і вибираються довільно. При створенні кнопки за промовчанням на ній буде напис-назва самого елемента кнопки. Для зміни цього тексту потрібно виділити кнопку одноразовим натисканням на панелі Inspector (права частина екрана) і навпроти рядка text вписати потрібний текст.

Опис програми

На початку будь-якої програми підключаються необхідні бібліотеки.

У цьому прикладі це:

import java.awt.*;

import java.awt.event.*;

import borland.jbcl.control.*;

import borland.jbcl.layout.*;

import com.sun.java.swing.*;

import java.net.*;

import java.io.*;

import java.util.*;

Далі описуємо соккет, рядкові змінні, вхідний та вихідний потоки:

Socket s;

String str;

InputStream is;

OutputStream os;

На наступному етапі створюємо вхідний та вихідний потоки, викликаючи для цього методи getInputStream та getOutputStream, відповідно:

is = s.getInputStream();

os = s.getOutputStream();

Далі додаток готує буфер buf для прийому даних і визначає змінну length, в яку записуватиметься розмір прийнятого блоку даних:

byte buf[] = New byte[512];

int lenght;

Тепер все готове для запуску циклу прийому та обробки рядків від клієнтської програми.

Для створення підключення з сервером, користуючись кнопкою «Connect», виділимо її в режимі Design, і в панелі Inspector, на вкладці Events знаходимо рядок MouseClicked і двічі натискаємо по її полю. Автоматично переходьте в розділ Source та описуємо її:

void jButton1_mouseClicked(MouseEvent e) {

String adress; {adress = choiceControl1.getSelectedItem();

try {

s = New Socket (adress, 9999);

is=s.getInputStream();

os=s.getOutputStream();

str=new String(buf,0,length);

str=»Connect»;

buf=str.getBytes();

os.write(buf);

length=is.read(buf);

textFieldControl1.setText(str);

jButton2.enable();

jButton2.setEnabled(true);

jButton1.disable();

jButton1.setEnabled(false);

jButton3.enable(true); }

catch (Exception ioe) {}

}}

Перший рядок автоматично генерується програмою після операції MouseClicked.

Потім ми звертаємо увагу на кнопки на якому вказується шлях з’єднання.

І нарешті створюємо соккет і потоки, що входить і виходить.

Все, що йде нижче, необов’язково. У нашому випадку це ініціалізація підключення шляхом відправлення слова Connect на сервер, після чого воно повертається назад при здійсненні підключення. Далі слід відключення на час деяких кнопок, щоб уникнути помилок з боку користувача.

© Реферат плюс



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *