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

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ม.ค. 2025

ความคิดเห็น • 34

  • @Bobocode
    @Bobocode  2 ปีที่แล้ว +1

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

  • @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 ?

  • @МаксимЗелінський-ш4к
    @МаксимЗелінський-ш4к 8 หลายเดือนก่อน +1

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

    • @Bobocode
      @Bobocode  8 หลายเดือนก่อน +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" посилання, куди робити редірект і по ньому виконувати новий запит.

    • @МаксимЗелінський-ш4к
      @МаксимЗелінський-ш4к 8 หลายเดือนก่อน

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

  • @МаксимФедосов-з6е
    @МаксимФедосов-з6е 2 ปีที่แล้ว

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

  • @caffeinejavacode1475
    @caffeinejavacode1475 ปีที่แล้ว

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

  • @T_O_P_89
    @T_O_P_89 2 ปีที่แล้ว +1

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

  • @ASDjonok
    @ASDjonok ปีที่แล้ว

    Дякую

  • @k12370rty
    @k12370rty 2 ปีที่แล้ว

    Дуже дякую.

  • @МаксимПронь-ч8ч
    @МаксимПронь-ч8ч ปีที่แล้ว

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

    • @Bobocode
      @Bobocode  ปีที่แล้ว

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

    • @МаксимПронь-ч8ч
      @МаксимПронь-ч8ч ปีที่แล้ว +1

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

  • @serhiidorodko2682
    @serhiidorodko2682 2 ปีที่แล้ว +2

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

  • @connection_failed
    @connection_failed 9 หลายเดือนก่อน +1

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

    • @Bobocode
      @Bobocode  9 หลายเดือนก่อน

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

    • @connection_failed
      @connection_failed 9 หลายเดือนก่อน

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

    • @Bobocode
      @Bobocode  9 หลายเดือนก่อน

      @@connection_failed 😅

  • @olegprylipko6084
    @olegprylipko6084 2 ปีที่แล้ว +5

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

    • @mykhailomolnar2432
      @mykhailomolnar2432 2 ปีที่แล้ว

      На момент комента це картинка 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 11 หลายเดือนก่อน +1

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

    • @Bobocode
      @Bobocode  8 หลายเดือนก่อน +1

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

  • @bizkvit1985
    @bizkvit1985 2 ปีที่แล้ว +1

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

    • @T_O_P_89
      @T_O_P_89 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;
      }

  • @antonmaliar3463
    @antonmaliar3463 2 ปีที่แล้ว

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

    • @Bobocode
      @Bobocode  2 ปีที่แล้ว

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

    • @antonmaliar3463
      @antonmaliar3463 2 ปีที่แล้ว

      @@Bobocode дякую