МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||
Опис вихідного тексту серверного додатка SocketServУ методі main, що одержує керування відразу після запуску додатка, ми визначили трохи змінних. Масив bKbdInput розміром 256 байт призначений для зберігання рядків, уведених за допомогою клавіатури. У змінну ss класу ServerSocket буде записане посилання на об'єкт, призначений для встановлення каналу зв'язку через потоковий сокет (але не посилання на сам сокет): ServerSocket ss;Посилання на сокет, з використанням якого буде відбуватися передача даних, зберігається в змінній з ім'ям s класу Socket: Socket s;Крім того, ми визначили змінні is і os, відповідно, класів InputStream і OutputStream: InputStream is; OutputStream os;У ці змінні будуть записані посилання на вхідний і вихідний потік даних, які пов'язані із сокетом. Після відображення на консолі рядка назви додатка, метод main створює об'єкт класу ServerSocket, указуючи конструкторові номер порту 9999: ss = new ServerSocket(9999);Конструктор повертає посилання на об'єкт, з використанням якого можна встановити канал передачі даних із клієнтом. Канал установлюється методом accept: s = ss.accept();Цей метод переводить додаток у стан очікування доти, поки не буде встановлений канал передачі даних. Метод accept у випадку успішного створення каналу передачі даних повертає посилання на сокет, із застосуванням якого потрібно приймати й передавати дані. На наступному етапі сервер створює вхідний і вихідний потоки, викликаючи для ці методи getInputStream і getOutputStream, відповідно: is = s.getInputStream();os = s.getOutputStream();Далі додаток підготовляє буфер buf для прийому даних і визначає змінну length, у яку буде записуватися розмір прийнятого блоку даних: byte buf[] = new byte[512];int lenght;Тепер усе готово для запуску циклу прийому й обробки рядків від клієнтського додатка. Для читання рядка ми викликаємо метод read стосовно до вхідного потоку: lenght = is.read(buf);Цей метод повертає керування тільки після того, як всі дані будуть прочитані, блокуючи додаток на час своєї роботи. Якщо таке блокування небажане, вам належить виконувати обмін даними через сокет в окремому завданні. Метод read повертає розмір прийнятого блоку даних або -1, якщо потік вичерпаний. Ми скористалися цією обставиною для завершення циклу прийому даних: if(lenght == -1) break;Після завершення прийому блоку даних ми перетворимо масив у текстовий рядок str класу String, видаляючи з її символ перекладу рядка, і відображаємо результат на консолі сервера: System.out.println("> " + str);Потім отриманий рядок відправляється назад клієнтському додатку, для чого викликається метод write: os.write(buf, 0, lenght);Методу write передається посилання на масив, зсув початку даних у цьому масиві, рівне нулю, і розмір прийнятого блоку даних. Для виключення затримок у передачі даних через нагромадження даних у буфері (при використанні буферізованих потоків) необхідно примусово скидати вміст буфера методом flush: os.flush();І хоча в нашім випадку ми не користуємося буферізованими потоками, ми включили виклик цього методу для приклада. Тепер про завершальні дії після переривання циклу одержання, відображення й передачі рядків. Наш додаток явним образом закриває вхідний і вихідний потоки даних, сокет, а також об'єкт класу ServerSocket, з використанням якого був створений канал передачі даних: is.close();os.close();s.close();ss.close();
|
||||||||
|