Як дані передаються в мережі? 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
👉 Навчання від Bobocode: bit.ly/3IRrJhj
Дякую
Дуже дякую.
Дякую за чудову лекцію 😊😊
Дякую, дуже якісний контент в українському інтернет-просторі.
Привіт, дуже класні уроки, дякую! В завданні про custom json converter як раз вдало підходить використання String Block, згаданий в записі Modern Java)
😂
ДЗ:
1. Реалізувати примітивний JSON мапер (41:04)
2. Знайти картинку з найбільшим розміром (01:01:57)
3. Вправа hello-network-socket (bit.ly/3rGyThg)
Не зрозуміло завдання 2. Потрібно її вірішити зробив завдання на голих сокетах або можна використовувати якісь інші більш високорівневі компоненти? Бо там сайт Наса робить редірект на HTTPS протокол.
@@goodvin8554 HTTPS запит також можна зробити через "голий" сокет, просто треба трохи налаштувань.
@@Bobocode через SSLSocketFactory ?
Дуже цікаво. Дякую за таке чудове відео. Насправді, рік тому, я спробував створити простенький багато-поточний чат, так як цікавився тим як працюють компʼютерні мережі на низькому рівні. Спочатку тестував на локальному хості. Потім, прокинувши порт, спробував передати повідомлення на інший компʼютер через маршрутизатор. Далі я зохітв протестувати програму по мережі, але зʼєднання з хостом не відбулося. Помучившись і почитавши різноманітну інфу, я зрозумів, що з’єднання по мережі не вийде через те, що ip адреса мого маршрутизатора була приватною. Хоча можна було відправляти повідомлення через сусідський wifi, такий от експіріенс😢😅
Привіт! Якщо нема статичного IP, Ви можете встановити собі ngrok.
Дякую за пораду! Не знав, що є таке обхідне рішення.
Не бачу приводу не подякувати)) лекцiя во👍 ДЗ во🤟
Хто буде робити ДЗ напишiть розмір найбільшої картинки, я зміг знайти тiльки content-length=[178] і той у всіх однаковий
На момент комента це картинка mars.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/00010/soas/rdr/ccam/CR0_398381250PRCLF0030000CCAM05010L1.PNG
і Content-Length - 548726
Також всюди 178, дивно може від api_key залежить
Скоріше за все у вас статус 301 і ви не зробили редірект.
@@baibula дякую. Саме так, там всюди треба опрацьовувати редірект.
1:03:56 гарний поінт
По завданню "Реалізувати примітивний JSON мапер" не вистачає прикладу реалізації.
Та це міні дз, реалізація за вами)
для прикладу моя реалізація
@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;
}
Спробував зробити домашнє завдання, але у другій вправі запит повертає "moved permanently". Чи нормально це?
Так - це означає редірект. Якщо ви відриєте будь-яку з картинок, то побачете, що браузер робить редірект.
Спробуйте відкрити: 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" посилання, куди робити редірект і по ньому виконувати новий запит.
@@Bobocode Чудово, дякую, розв'язав. Завдяки цьому починаю розуміти, що таке хедери. Фотографія:
mars.jpl.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/00010/soas/rdr/ccam/CR0_398381250PRCLF0030000CCAM05010L1.PNG
Намагаюсь підключитись до ноута Тараса як у відео, щось не виходить. Підскажіть що не так?)
Якщо це жарт - то 😂.
Якщо ж ні, то до ноута Тараса ви можете підключитися тільки, якщо він ввімкнений, "слухає" конкретний сокет, до якого ви намагаєтеся підключитися і відповідний порт відкритий на зовні...
@@Bobocode звісно жарт, не все так погано :D
@@connection_failed 😅
не зовсім зрозуміло чому джава не працює з TCP, ми ж можемо створити server socket і вказати в ньому любий порт, а основна робота TCP це ж робота з портами, чи тут вся фішка в тому що ми ці порти створює в віртуальній машині а не операційній системі?
Java працює з TCP. Точніше в Java ми, зазвичай використовуємо TCP і працюємо поверх нього.
@@Bobocode дякую