Мережа

  • Навіщо нам працювати з мережею?
  • Socket

  • Socket - це один із кінців двостороннього комунікаційного каналу між двома програмами, що мають доступ до мережі.

    Definition: A socket is one endpoint of a two-way communication link between two programs running on the network."
    Socket є комбінацією IP-адреси (ідентифікує конкретний комп'ютер у мережі) та номера порту (розрізняє потоки місцепризначення в межах комп'ютера).
    Це можна відобразити так: 64.104.137.58:80, де 64.104.137.58 – IP-адреса, а 80 – порт.

  • Зв'язок із "зовнішнім світом" (файлами, Інтернетом, ...)

  • "A stream can represent many different kinds of sources and destinations, including disk files, devices, other programs, and memory arrays." (потоки)

  • Уведення даних із зовнішнього світу:
       
    Постачання даних у зовнішньій світ:
       

    Отримання даних

  • крок перший - підключення пакета java.net:
    import java.net.*;
    
  • крок 2 - створення об'єкту типу Socket
    Socket cli = new Socket("127.0.0.1", 80);
    (IP-адресу 127.0.0.1 слід замінити адресою реального комп'ютера з програмою-сервером)
  • отримання даних від сервера: cli.getInputStream() - повертає потік типу InputStream, через який в програму надходитиме інформація з сокета
  • щоб перетворити ці дані на текст, "обгортаємо" отриманий потік в InputStreamReader:
    InputStreamReader is = new InputStreamReader( cli.getInputStream() )
  • При цьому знадобиться пакет java.io:
    import java.io.*;
    
  • Тепер можна працювати як з файлами (там був FileReader):
  • Не забуваємо про те, що як і при роботі з файлами, мережа може стати причиною помилок (немає зв'язку з сервером тощо).
    Тому доцільно обробити помилки, а не просто "позбавитися" від них через ключове слово throws:
            try {
                // код, що може викликати помилку
            } catch (Exception e) {
                System.out.println("Сталася помилка: "+e.getMessage());
            }
    

  • Діалог із сервером

  • щоб обмінятися із сервером, наприклад, числовими даними, "огортаємо" потоки, отримані від сокета через методи getInputStream() та getOutPutStream() у DataInputStream та DataOutputStream відповідно:
  • Як і раніше, не забуваємо про конструкцію try - catch або ключове слово throws для обробки можливих помилок

  • Повернутися