# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
2 теста |
|||
В этой серии видеоуроков мы подробно разберём принципы работы клиент-серверных программ на основе сокетов и напишем небольшую демонстрационную программу. Рекомендую ознакомиться со статьёй: http://qaru.site/questions/12999/what-is-the-difference-between-a-port-and-a-socket Отчёт отправил: 20167. Айдар Выполнено за 29 мин. [Показать отчёт] Научился: 1. Клиент-серверное приложение - распределённая программа, состоящая из центральной части - сервера, который обрабатывает запросы клиентской части данной программы, которая в свою очередь отправляет запросы и получает информацию от сервера. 2. Сокет - программный интерфейс (не путать с интерфейсами в ООП), который обеспечивает взаимодействие между приложениями по сети, посредством взаимодействия с протоколами TCP/IP. Серверный сокет - сокет, который обычно работает в режиме "слушателя" на заданном порту, представляет собой пару (IP-адрес; порт), по которым можно получить доступ к серверу. IP-адрес - сетевой адрес хоста, на котором расположено приложение. порт - номер, зарезервированный ОС, по которому можно получить доступ к заданному приложению на данном конкретном хосте или отправить данные с заданного хоста. сокет - программный интерфейс, который задаётся парой (IP-адрес, порт), для взаимодействия между приложениями по сети. |
|||||
2 | Простейший сервер |
2 теста |
|||
На этом уроке мы создадим простейший сервер, который будет принимать подключения от клиентов и проверим его работу из телнета и браузера.
Отчёт отправил: 20167. Айдар Выполнено за 20 мин. [Показать отчёт] Научился: 1. Во время выполнения Accept() сокет, переходит в режим прослушивания, ожидания подключения клиента по соотв. номеру порта. (Протокол TCP для этого сокета переходит в состояние Listen). 2. IP-адрес при конфигурации серверного сокета вообще не обязателен. Хотя при желании это можно сделать, но адрес 127.0.0.1 (Local Host) указывать совершенно некорректно. |
|||||
3 | Автоответчик |
1 тест |
|||
На этом слайде мы напишем сервер-автоответчик, который всем клиентам будет отправлять одно и тоже сообщение.
Отчёт отправил: 20167. Айдар Выполнено за 1 час. 11 мин. [Показать отчёт] Научился: Сервер работает и отправляет ответное сообщение. Уже похоже на полноценный сервер Движемся дальше :) |
|||||
4 | Правильный заголовок |
2 теста |
|||
На этом дополнительном слайде мы сформируем правильный HTTP-ответ, который будет выдавать наш сервер, чтобы даже привередливые браузеры смогли бы его отобразить. Отчёт отправил: 20167. Айдар Выполнено за 1 час. 16 мин. [Показать отчёт] Научился: Добавил в параметры заголовка св-во Content-Length, разобрался как поменять цвет http заголовка. |
|||||
5 | Как хорошо уметь читать! |
1 тест |
|||
На этом слайде мы создадим клиента, который сможет прочитать сообщение от сервера.
Отчёт отправил: 20167. Айдар Выполнено за 1 час. 5 мин. [Показать отчёт] Научился: Чтобы запустить клиентский сокет несколько раз, я поместил весь алгоритм в отдельный статический метод ClientRun() и в методе Main запустил его в цикле. Для нового метода также нужно не забыть дописать throws IOException. |
|||||
6 | Клиент-серверный диалог |
|
|||
На этом слайде мы обеспечим полноценное общение между клиентом и сервером через сокет
Отчёт отправил: 20167. Айдар Выполнено за 43 мин. [Показать отчёт] Научился: Переход на новую строку при помощи \n или метода newline необходим для обозначения, что строка завершена и сформирована, чтобы reader сервера эту строку мог прочитать. Запрос от браузера на установление соединения составляет 14 символов. Для интереса я вывел этот запрос в консоль - "GET / HTTP/1.1" |
|||||
7 | Экспериментальный сервачок |
1 тест |
|||
На этом уроке мы ещё раз построчно и подробно разберём написанные программы и поэкспериментируем с "медленным" сервером. Самостоятельное задание - написать клиент-серверную игру "Угадай число".
Отчёт отправил: 20167. Айдар Выполнено за 1 день 10 час. 41 мин. [Показать отчёт] Научился: Реализовал работу клиент-сервера "Угадай число". Сервер рандомно загадывает число, клиент также рандомно пытается его отгадать. Работа клиента также помещена в цикл while(true), который прерывается при правильном ответе. Сложности: Не уверен, что такая реализация лучшая, так как клиент может отправлять запросы с одним и тем же числом. |
|||||
8 | Техническое задание |
|
|||
Мы познакомились с принципом работы сокетов. Теперь самое время создать какую-нибудь простую клиент-серверную программку. На этом видео мы сформулируем техническое задание. Попробуйте самостоятельно написать программу по ТЗ. Отчёт отправил: 20167. Айдар Выполнено за 1 день 4 мин. [Показать отчёт] Научился: Программа реализована. Буду пытаться её улучшить при просмотре дальнейших видео-уроков. Сложности: Понять и придумать корректную логику работы вспомогательных методов. Не удалось обойтись без обработки исключений в методе Main (throws IOException). В целом программа выглядит сумбурно, нужен рефакторинг ) Видеообзор: uWK_3-V8cRU |
|||||
9 | Основной алгоритм |
|
|||
На этом слайде мы напишем два алгоритма в одной программе: для сервера и для клиента.
Отчёт отправил: 20167. Айдар Выполнено за 2 дня 22 час. 11 мин. [Показать отчёт] Научился: Внёс некоторые изменения в уже реализованную программу: 1. Проверка на кол-во аргументов. 2. В метод Calculate добавил 3-й аргумент для определения типа операции Класс Phone у меня уже реализован под названием Socketor |
|||||
10 | Скелет телефона |
1 тест |
|||
На этом коротком слайде мы создадим метод calculate() и очень быстро набросаем скелет класса Phone, используя возможности кодогенерации Intellij Idea.
Отчёт отправил: 20167. Айдар Выполнено за 10 мин. [Показать отчёт] Научился: Класс Phone я уже создал самостоятельно, у меня он остался под названием Socketor, метод Calculate также был создан. Пока всё соответствует реализации программы в видеокурсе. Немного потренировался работе функционала создания заглушек InteliJ IDEA |
|||||
11 | Универсальный сокет |
|
|||
На этом слайде мы создадим все методы универсального сокета в классе Phone. Протестируйте программу в разных режимах. Придумайте, какую ещё клиент-серверную программу можно написать. Отчёт отправил: 20167. Айдар Выполнено за 1 час. 46 мин. [Показать отчёт] Научился: Сделал полный рефакторинг своей программы, созданной ранее. По методике, представленной в видео, сделал отдельный класс Phone, в который вынесена вся сетевая логика и работа с I/O потоками. Так получилось более логично и структурировано. Сложности: Добавил обработку исключения при делении на ноль для функции Calculate(), теперь в консоль выводится соответствующее сообщение. Но пока не понял, как реализовать, отправку этого сообщения клиенту. |
|||||
12 | ФИНАЛЬНЫЙ УРОК |
без видео 1 тест |
|||
Оставьте отзыв об этом миникурсе и отчитайтесь за самостоятельное задание.
Отчёт отправил: 20167. Айдар Выполнено за 10 мин. [Показать отчёт] Научился: Отличный видеокурс, довольно краткий, но по сути. Очень хорошо, что в данном курсе много самостоятельных заданий, причём комплексных, например, полностью написать программу. В процессе дальнейшего рефакторинга своей собственной программы, приходит понимание правильно подхода к построению такого рода приложений. Буду проходить дальше, интересна реализация многопоточности. Видеообзор: 1I_asBLGkhE |
|||||
13 |
![]() |
|
|||
На этом слайде мы поговорим о многопоточности, рассмотрим несколько примеров, кода имеет смысл разделять задачу на потоки, а когда нет. На следующих слайдах мы напишем простой многопоточный сокет для сервера на языке Java
Отчёт отправил: 20167. Айдар Выполнено за 26 мин. [Показать отчёт] Научился: Многопоточность эффективна, например, в банке - при наличии нескольких банкоматов очередь движется гораздо быстрее. Многопоточнось будет неэффективна при запуске сети или узла связи - необходима строгая последовательность этапов - осмотр площадки - дизайн сети - производство и доставка оборудования - монтаж - пусконаладка - интеграция - приёмосдаточные испытания. Из профессионального опыта :) |
|||||
14 | VIP. Два потока |
1 тест |
|||
На этом слайде мы создадим простейшую программу с двумя потоками.
Отчёт отправил: 20167. Айдар Выполнено за 1 день 1 час. 6 мин. [Показать отчёт] Научился: Для реализации задания вывод третьего потока, я создал ещё один Runnable класс, и передал его в отдельный поток. Synchronized реализует поочерёдный доступ к ресурсам. В определённый момент только один из синхронизированных потоков имеет доступ к блокам памяти. |
|||||
15 | VIP. Синхрофазатрон |
|
|||
На этом слайде мы создадим коллизию и узнаем, как от неё избавиться.
Отчёт отправил: 20167. Айдар Выполнено за 9 час. 31 мин. [Показать отчёт] Научился: Поэкспериментировали с потоками и коллизиями. Synchronized метод подразумевает, что он может выполняться только одним процессом в данный момент. Св-во переменной volatile означает, что доступ или изменение данной переменной происходит тут же, без ожидания завершения операций над переменной другими потоками. Время работы программы увеличилось из-за того, что в Synchronized метод next кроме основных операций была добавлена пауза Thread.sleep(10). |
|||||
16 | VIP. Функциональное потокообразование |
2 теста |
|||
На этом коротком слайде мы узнаем, как создать поток через функциональное программирование.
Отчёт отправил: 20167. Айдар Выполнено за 1 час. 15 мин. [Показать отчёт] Научился: Очень интересная тема. Только сегодня где-то видел функциональный код на С#, там вроде бы оператор => {} используется. Сложности: Хотел вывести номер потока в консоль, пока не вышло. Буду думать дальше ) |
|||||
17 | VIP. Мультики на сервере |
1 тест |
|||
На этом слайде мы встроим многопоточность в клиент-серверную программу Socketor и продемонстрируем достигнутый эффект.
Отчёт отправил: 20167. Айдар Выполнено за 7 час. 26 мин. [Показать отчёт] Научился: Очень интересный урок, получил опыт реализации многопоточности в работающем приложении. |
|||||
18 | VIP. Динамичная многопоточность |
|
|||
На этом заключительном видеоуроке мы познакомимся с другим способом создания многопоточного сервера. Если на предыдущем уроке у нас "крутилось" несколько копий одной программы, то теперь мы будем создавать новый поток при каждом подключении клиента. Сравните оба варианта и напишите в отчёте, какой подход вам больше понравился и почему. Отчёт отправил: 20167. Айдар Выполнено за 2 час. 51 мин. [Показать отчёт] Научился: Реализовали динамический способ создания потоков, который мне понравился больше. В целом урок очень интересный - затрагивается много аспектов - работа с командной строкой, bat-файлами, настройками IntelijIdea ну и конечно, рефакторинг нашей программы. Спасибо за интересный видеокурс! Хороший импульс для дальнейшего изучения многопоточности и асинхронного программирования. :) |
|||||
Итого: 18 видеоуроков |
3 час. 22 мин. 15 тестов |
9 чел. | |||
Финалисты: Yefim, Chip, Иван Воронин, Tekashnik, Александр, vip, Айдар, Dmitry Sinitsin, Anatoli . |