# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
2 теста |
|||
В этой серии видеоуроков мы подробно разберём принципы работы клиент-серверных программ на основе сокетов и напишем небольшую демонстрационную программу. Рекомендую ознакомиться со статьёй: http://qaru.site/questions/12999/what-is-the-difference-between-a-port-and-a-socket Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 35 мин. [Показать отчёт] Научился: Повторение мать учения! 1 - что такое клиент-серверное приложение? клиент-серверное приложение, это когда приложение разбито на две части, одна находится на сервере, вторая раздаётся клиентам и общаются они по средствами передачи пакетов по сети. 2 - что такое серверный сокет? серверный сокет, это по сути ПОРТ, который умеет прослушивать и создавать соединение с тем, кто на него прислал пакет. 3 - что такое сокет? сокет это порт, при помощи которого передаются пакеты между приложениями по сети. 4 - зачем нужен айпи и сокет, чем они отличаются? айпи это адрес в сети, обычно уникальный (про натирование не будем) по нему идентифицируется точка отправки пакетов по сети, а сокет это порт, который идентифицирует какому приложению нужно обрабатывать пришедшие пакеты. з.ы. отличная аналогия с почтовыми отправлениями по адресам и номерам домов. Сложности: найти время |
|||||
2 | Простейший сервер |
2 теста |
|||
На этом уроке мы создадим простейший сервер, который будет принимать подключения от клиентов и проверим его работу из телнета и браузера.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 23 мин. [Показать отчёт] Научился: На данный момент происходит прослушка с любой подсети, поэтому айпи адрес на сервере не использовали. Метод accept() запускает саму прослушку и ожидание любого подключения. После того как подключение было поймано далее идёт выполнение close(), который закрывает подключение и далее завершение приложения. Сложности: найти время |
|||||
3 | Автоответчик |
1 тест |
|||
На этом слайде мы напишем сервер-автоответчик, который всем клиентам будет отправлять одно и тоже сообщение.
Отчёт отправил: 10558. Иван Воронин Выполнено за 27 мин. [Показать отчёт] Научился: Вывел русские символы, всё отлично, идём дальше. Сложности: найти время |
|||||
4 | Правильный заголовок |
2 теста |
|||
На этом дополнительном слайде мы сформируем правильный HTTP-ответ, который будет выдавать наш сервер, чтобы даже привередливые браузеры смогли бы его отобразить. Отчёт отправил: 10558. Иван Воронин Выполнено за 16 мин. [Показать отчёт] Научился: Всё отлично, правильно сделали, что добавили урок по заголовкам, такие вещи надо знать! Сложности: найти время |
|||||
5 | Как хорошо уметь читать! |
1 тест |
|||
На этом слайде мы создадим клиента, который сможет прочитать сообщение от сервера.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 11 мин. [Показать отчёт] Научился: Всё отлично, идём дальше. Сложности: найти время |
|||||
6 | Клиент-серверный диалог |
|
|||
На этом слайде мы обеспечим полноценное общение между клиентом и сервером через сокет
Отчёт отправил: 10558. Иван Воронин Выполнено за 34 мин. [Показать отчёт] Научился: в браузере другая длинна, потому что браузер отправляет запрос: GET / HTTP/1.1 поэтому и длинна 14 в моём случае. Сложности: найти время |
|||||
7 | Экспериментальный сервачок |
1 тест |
|||
На этом уроке мы ещё раз построчно и подробно разберём написанные программы и поэкспериментируем с "медленным" сервером. Самостоятельное задание - написать клиент-серверную игру "Угадай число".
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 27 мин. [Показать отчёт] Научился: Реализовал игру "угадай число от 1 до 100" удалось угадать с 4 попытки. всё отлично, идём дальше. Сложности: найти время |
|||||
8 | Техническое задание |
|
|||
Мы познакомились с принципом работы сокетов. Теперь самое время создать какую-нибудь простую клиент-серверную программку. На этом видео мы сформулируем техническое задание. Попробуйте самостоятельно написать программу по ТЗ. Отчёт отправил: 10558. Иван Воронин Выполнено за 54 мин. [Показать отчёт] Научился: в силу занятости последнее время, решил не бежать впереди паровоза, но создал заготовку, а именно единое приложение, которое принимает аргументы на вход и перечисляет их, чтобы на след. уроках было не скучно. Сложности: найти время |
|||||
9 | Основной алгоритм |
|
|||
На этом слайде мы напишем два алгоритма в одной программе: для сервера и для клиента.
Отчёт отправил: 10558. Иван Воронин Выполнено за 59 мин. [Показать отчёт] Научился: Повторение мать учения! Реализовал метод calculate(), так же реализовал его перегрузку без параметра операции, который по умолчанию складывает передаваемые аргументы для краткой записи. реализовал метод для генерации сообщения о том, в каком режиме запущен сервер (текстовое сообщение). з.ы. потом можно будет порефакторить и сократить ещё код методов runServer/Client() Сложности: найти время |
|||||
10 | Скелет телефона |
1 тест |
|||
На этом коротком слайде мы создадим метод calculate() и очень быстро набросаем скелет класса Phone, используя возможности кодогенерации Intellij Idea.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 27 мин. [Показать отчёт] Научился: Повторение, мать учения! Метод calculate() реализовал так же на прошлом уроке. Сгенерировал при помощи IntelliJ IDEA класс Phone(). Всё отлично, идём дальше. Сложности: найти время |
|||||
11 | Универсальный сокет |
|
|||
На этом слайде мы создадим все методы универсального сокета в классе Phone. Протестируйте программу в разных режимах. Придумайте, какую ещё клиент-серверную программу можно написать. Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 41 мин. [Показать отчёт] Научился: Хорошее решение, уже ближе к ООП, сгенерил jar файл, запустил через консоль jar файлы. Всё отлично, идём дальше. Сложности: найти время |
|||||
12 | ФИНАЛЬНЫЙ УРОК |
без видео 1 тест |
|||
Оставьте отзыв об этом миникурсе и отчитайтесь за самостоятельное задание.
Отчёт отправил: 10558. Иван Воронин Выполнено за 31 мин. [Показать отчёт] Научился: Отличный мини-курсик, подобное уже реализовывали на C#, но тут вышло более красиво, подобный класс теперь можно использовать для реализации игр по сети на двоих и более игроков. Можно начать с игры крестики нолики, думаю проще некуда. И не совсем примитивное как угадайка. з.ы. создал батника для генерации jar файла, так же создал батника для каждого режима работы сервера, см. видео. Сложности: найти время Видеообзор: oAxmC6cTFyY |
|||||
13 |
![]() |
|
|||
На этом слайде мы поговорим о многопоточности, рассмотрим несколько примеров, кода имеет смысл разделять задачу на потоки, а когда нет. На следующих слайдах мы напишем простой многопоточный сокет для сервера на языке Java
Отчёт отправил: 10558. Иван Воронин Выполнено за 49 мин. [Показать отчёт] Научился: Издержки многопоточности (см верхний скрин) Недоработки многопоточности (см. нижний скрин) з.ы. многопоточность полезна в супермаркетах, когда одновременно обслуживается несколько человек, чтобы не было застоя и лишней траты времени с продуктами перед выходом. многопоточность бесполезна, если нужно строгая последовательность, к примеру: чтобы одеться, надо встать, а чтобы встать, надо проснуться, а чтобы проснуться, надо уснуть, а чтобы уснуть, надо... и так далее. Сложности: найти время |
|||||
14 | VIP. Два потока |
1 тест |
|||
На этом слайде мы создадим простейшую программу с двумя потоками.
Отчёт отправил: 10558. Иван Воронин Выполнено за 23 мин. [Показать отчёт] Научился: Реализовал 4 потока, получились 1 основной и 3 дополнительных. Доработал класс Worker, теперь ему можно при создании передавать его имя, для наглядности. Всё просто, идём дальше. Сложности: найти время |
|||||
15 | VIP. Синхрофазатрон |
|
|||
На этом слайде мы создадим коллизию и узнаем, как от неё избавиться.
Отчёт отправил: 10558. Иван Воронин Выполнено за 36 мин. [Показать отчёт] Научился: Это же очевидно, функцию next() может запускать только кто-то один, другие ждут, по сути это как магазин с кучей касс, но кассир всего один, вот покупатели и стали в один ряд к единственно рабочей кассе, потому что в эту функцию засунули sleep(), которые и отнимает львиную долю времени. просто не нужно в подобные функции пихать что-то длительное, особенно обычные задержки типо sleep(), там должны быть максимально быстрые телодвижения, пока кто-то один занял место, другие могут делать свои задачи, которые по идее должны быть медленнее, чем время выполнения next(), увеличение на единицу быстрее, чем вывод на экран, поэтому всё проходит красиво, пока другие рисуют, один из потоков складывает незаметно для них. В конце же вообще засунули целый цикл в метод next(), пока один на качелях не покатался, другие стояли и ждали очереди. Сложности: найти время |
|||||
16 | VIP. Функциональное потокообразование |
2 теста |
|||
На этом коротком слайде мы узнаем, как создать поток через функциональное программирование.
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 53 мин. [Показать отчёт] Научился: Многопоточность она такая, что-то быстрее, что-то медленнее, главное, чтобы оно работало как планируется! Сложности: найти время |
|||||
17 | VIP. Мультики на сервере |
1 тест |
|||
На этом слайде мы встроим многопоточность в клиент-серверную программу Socketor и продемонстрируем достигнутый эффект.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 31 мин. [Показать отчёт] Научился: очередь печати на принтер, рассылки уведомлений и т.д. Всё отлично, идём дальше. Сложности: найти время |
|||||
18 | VIP. Динамичная многопоточность |
|
|||
На этом заключительном видеоуроке мы познакомимся с другим способом создания многопоточного сервера. Если на предыдущем уроке у нас "крутилось" несколько копий одной программы, то теперь мы будем создавать новый поток при каждом подключении клиента. Сравните оба варианта и напишите в отчёте, какой подход вам больше понравился и почему. Отчёт отправил: 10558. Иван Воронин Выполнено за 46 мин. [Показать отчёт] Научился: Данный способ лично мне нравится больше, чем способ из прошлого урока, тем, что ресурсы выделяются динамически по мере надобности при этом производительность и ожидание клиентов сводится к минимуму. Вариант же из прошлого урока имеет лишь один плюс, ты точно знаешь сколько ресурсов понадобится для работы сервера, но его будет очень просто перегрузить и вывести из строя, данную же реализацию таким способом перегрузить будет сложнее, особенно если сервер располагает огромными ресурсами. Отличный курсик, советую всем, очень много интересный исследований проведено. Сложности: найти время |
|||||
Итого: 18 видеоуроков |
3 час. 22 мин. 15 тестов |
9 чел. | |||
Финалисты: Yefim, Chip, Иван Воронин, Tekashnik, Александр, vip, Айдар, Dmitry Sinitsin, Anatoli . |