Як дані передаються в мережі? Java Networking: Сокети, TCP/IP, HTTP, JSON

Поділитися
Вставка
  • Опубліковано 20 чер 2024
  • 👉 Приєднуйся до Bobocode Community: www.bobocode.com/
    ____________________________________________
    Patreon: / bobocode
    GitHub: github.com/bobocode-projects
    Telegram: t.me/bobocode​
    LinkedIn: bit.ly/2RWPQF5
    Twitter: bit.ly/3vaQiOl
    Тарас в LinkedIn: bit.ly/2ElWg8J
    Тарас в Twitter: bit.ly/33Pmuwg
    ____________________________________________
    12-те заняття тренувальної програми Ultimate Enterprise Java (2021).
    УВАГА! Відеозапис не містить активної частини заняття.
    00:00 - Нарізка основних моментів
    03:04 - Початок
    04:03 - Мережева архітектура
    07:06 - Що таке Сокет?
    07:45 - Демо по сокетах
    08:28 - Пакет java.net
    09:55 - Реалізовуємо сервер
    11:22 - Як читати дані з сокета?
    15:22 - Реалізовуємо клієнт
    11:22 - Як писати дані в сокет?
    23:10 - Для чого потрібна багатопоточність?
    23:26 - 🔥 Робимо сервер багатопоточним
    30:01 - Експериментуємо...
    35:00 - Для чого нам сокети?
    35:53 - TCP vs. UDP
    36:33 - Як дані передаються в мережі?
    37:13 - Типи комунікації
    38:21 - JSON - Типовий формат даних
    39:45 - Як конвертувати JSON в Java обʼєкт?
    41:04 - ЗАВДАННЯ: р еалізувати свій JSON конвертер
    46:29 - Ніякої магії не існує
    48:50 - Огляд HTTP протоколу
    55:41 - Q&A по HTTP
    01:00:24 - Що ми зазвичай робимо на проектах?
    01:01:57 - ЗАВДАННЯ: знайти картинку з найбільшим розміром
    01:03:55 - Для чого мені це все знати?
    #opensource #java #education

КОМЕНТАРІ • 34

  • @Bobocode
    @Bobocode  Рік тому +1

    👉 Навчання від Bobocode: bit.ly/3IRrJhj

  • @ASDjonok
    @ASDjonok 4 місяці тому

    Дякую

  • @k12370rty
    @k12370rty 2 роки тому

    Дуже дякую.

  • @yasha802
    @yasha802 2 роки тому +1

    Дякую за чудову лекцію 😊😊

  • @user-wv7pk5sh3h
    @user-wv7pk5sh3h Рік тому

    Дякую, дуже якісний контент в українському інтернет-просторі.

  • @serhiidorodko2682
    @serhiidorodko2682 2 роки тому +2

    Привіт, дуже класні уроки, дякую! В завданні про custom json converter як раз вдало підходить використання String Block, згаданий в записі Modern Java)

  • @Bobocode
    @Bobocode  2 роки тому +6

    ДЗ:
    1. Реалізувати примітивний JSON мапер (41:04)
    2. Знайти картинку з найбільшим розміром (01:01:57)
    3. Вправа hello-network-socket (bit.ly/3rGyThg)

    • @goodvin8554
      @goodvin8554 Рік тому

      Не зрозуміло завдання 2. Потрібно її вірішити зробив завдання на голих сокетах або можна використовувати якісь інші більш високорівневі компоненти? Бо там сайт Наса робить редірект на HTTPS протокол.

    • @Bobocode
      @Bobocode  Рік тому

      @@goodvin8554 HTTPS запит також можна зробити через "голий" сокет, просто треба трохи налаштувань.

    • @goodvin8554
      @goodvin8554 Рік тому

      @@Bobocode через SSLSocketFactory ?

  • @user-bn5en3eo4q
    @user-bn5en3eo4q 9 місяців тому

    Дуже цікаво. Дякую за таке чудове відео. Насправді, рік тому, я спробував створити простенький багато-поточний чат, так як цікавився тим як працюють компʼютерні мережі на низькому рівні. Спочатку тестував на локальному хості. Потім, прокинувши порт, спробував передати повідомлення на інший компʼютер через маршрутизатор. Далі я зохітв протестувати програму по мережі, але зʼєднання з хостом не відбулося. Помучившись і почитавши різноманітну інфу, я зрозумів, що з’єднання по мережі не вийде через те, що ip адреса мого маршрутизатора була приватною. Хоча можна було відправляти повідомлення через сусідський wifi, такий от експіріенс😢😅

    • @Bobocode
      @Bobocode  9 місяців тому

      Привіт! Якщо нема статичного IP, Ви можете встановити собі ngrok.

    • @user-bn5en3eo4q
      @user-bn5en3eo4q 8 місяців тому +1

      Дякую за пораду! Не знав, що є таке обхідне рішення.

  • @olegprylipko6084
    @olegprylipko6084 2 роки тому +5

    Не бачу приводу не подякувати)) лекцiя во👍 ДЗ во🤟
    Хто буде робити ДЗ напишiть розмір найбільшої картинки, я зміг знайти тiльки content-length=[178] і той у всіх однаковий

    • @mykhailomolnar2432
      @mykhailomolnar2432 Рік тому

      На момент комента це картинка mars.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/00010/soas/rdr/ccam/CR0_398381250PRCLF0030000CCAM05010L1.PNG
      і Content-Length - 548726

    • @FillLemon
      @FillLemon Рік тому

      Також всюди 178, дивно може від api_key залежить

    • @baibula
      @baibula 4 місяці тому +1

      Скоріше за все у вас статус 301 і ви не зробили редірект.

    • @Bobocode
      @Bobocode  Місяць тому +1

      @@baibula дякую. Саме так, там всюди треба опрацьовувати редірект.

  • @caffeinejavacode1475
    @caffeinejavacode1475 Рік тому

    1:03:56 гарний поінт

  • @bizkvit1985
    @bizkvit1985 2 роки тому +1

    По завданню "Реалізувати примітивний JSON мапер" не вистачає прикладу реалізації.

    • @yasha802
      @yasha802 2 роки тому +1

      Та це міні дз, реалізація за вами)

    • @dolivoserg3603
      @dolivoserg3603 2 роки тому

      для прикладу моя реалізація
      @SneakyThrows
      private static T jsonToObj(String json, Class userClass) {
      var constructor = userClass.getConstructor();
      T user = constructor.newInstance();
      for (String line : json
      .replaceAll("\"", "")
      .split("
      ")) {
      if (!line.contains(": ")) continue;
      //parsing
      String[] fieldValue = line
      .replaceFirst(",", "")
      .trim()
      .split(": ");
      //deserialize
      var declaredField = userClass.getDeclaredField(fieldValue[0]);
      var value = fieldValue[1];
      declaredField.set(user, value);
      }
      return user;
      }

  • @user-fw2jj9ck4y
    @user-fw2jj9ck4y Місяць тому +1

    Спробував зробити домашнє завдання, але у другій вправі запит повертає "moved permanently". Чи нормально це?

    • @Bobocode
      @Bobocode  Місяць тому +1

      Так - це означає редірект. Якщо ви відриєте будь-яку з картинок, то побачете, що браузер робить редірект.
      Спробуйте відкрити: mars.jpl.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/00300/opgs/edr/fcam/FRB_424113030EDR_F0060308FHAZ00323M_.JPG і вас перенаправить на mars.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/00300/opgs/edr/fcam/FRB_424113030EDR_F0060308FHAZ00323M_.JPG
      Щоб в коді зробити відповідний редірект, вам треба перевіряти статус код відповіді (в даному випадку він 302 MOVED PERMANENTLY), а тоді витягувати з хедера "Location" посилання, куди робити редірект і по ньому виконувати новий запит.

    • @user-fw2jj9ck4y
      @user-fw2jj9ck4y Місяць тому

      @@Bobocode Чудово, дякую, розв'язав. Завдяки цьому починаю розуміти, що таке хедери. Фотографія:
      mars.jpl.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/00010/soas/rdr/ccam/CR0_398381250PRCLF0030000CCAM05010L1.PNG

  • @connection_failed
    @connection_failed 2 місяці тому

    Намагаюсь підключитись до ноута Тараса як у відео, щось не виходить. Підскажіть що не так?)

    • @Bobocode
      @Bobocode  2 місяці тому

      Якщо це жарт - то 😂.
      Якщо ж ні, то до ноута Тараса ви можете підключитися тільки, якщо він ввімкнений, "слухає" конкретний сокет, до якого ви намагаєтеся підключитися і відповідний порт відкритий на зовні...

    • @connection_failed
      @connection_failed 2 місяці тому

      @@Bobocode звісно жарт, не все так погано :D

    • @Bobocode
      @Bobocode  2 місяці тому

      @@connection_failed 😅

  • @antonmaliar3463
    @antonmaliar3463 Рік тому

    не зовсім зрозуміло чому джава не працює з TCP, ми ж можемо створити server socket і вказати в ньому любий порт, а основна робота TCP це ж робота з портами, чи тут вся фішка в тому що ми ці порти створює в віртуальній машині а не операційній системі?

    • @Bobocode
      @Bobocode  Рік тому

      Java працює з TCP. Точніше в Java ми, зазвичай використовуємо TCP і працюємо поверх нього.

    • @antonmaliar3463
      @antonmaliar3463 Рік тому

      @@Bobocode дякую