
Рекомендую ознакомиться со статьёй, приведенной в ссылке ниже
Самостоятельное задание:
Прослушать видео.
Написать ответы на вопросы.
Что такое клиент-серверное приложение?
Что такое серверный сокет?
Что такое (клиентский) сокет?
Зачем нужны IP, порт, сокет и чем они отличаются?
3. Найти картинку на тему сокетов и прикрепить к отчёту.
На этом уроке мы создадим простейший сервер, который будет принимать подключения от клиентов и проверим его работу из телнета и браузера.
Самостоятельное задание:
Написать, какую среду разработки вы будете использовать.
Создать проект ClientServerJava.
Подключить необходимые для работы с сетью и вводом выводом библиотеки.
Создать Socket.
Запустить и протестировать работу созданного сервера через браузер и/или telnet.
Прислать результат работы программы.
На этом уроке мы напишем сервер-автоответчик, который всем клиентам будет отправлять одно и тоже сообщение.
Самостоятельное задание:
Создать на серверной части нашего приложения клиентский сокет (clientSocket).
Проверить работу сервера в режиме telnet клиент и в браузерном варианте.
* Браузер может не отображать текст, так как он не соответствует HTTP.
* Попробуйте другой браузер или сформулируйте корректный HTTP-запрос.
Реализовать функционал вывода целых строк.
Зациклить работу нашего одноразового сервера.
Реализовать отображение количества созданных сессий.
На этом дополнительном уроке мы сформируем правильный HTTP-ответ, который будет выдавать наш сервер, чтобы даже привередливые браузеры смогли бы его отобразить.
Самостоятельное задание:
Сформировать правильный заголовок и тело HTTP-response.
Проверить работу нашего сервачка в разных браузерах.
* Почитать больше об HTTP заголовках и написать, что вы узнали.
На этом слайде мы создадим клиента, который сможет подключиться к серверу и получить от него сообщение.
Самостоятельное задание:
Создать новый класс Client.
Создать клиентский сокет clientSocket. Прописать host и port.
Запустить сервер и приложение убедится что все работает.
Дописать код побайтового считывания данных с сервера в массив и проверить работу приложения в этом режиме.
Создать reader для считывания по строчкам.
Доработать серверную часть в части вывода сообщений и проверить работу в браузере.
На этом уроке мы обеспечим полноценное общение между клиентом и сервером через сокет.
Самостоятельное задание:
Продублировать функционал передачи сообщений с сервера в клиента.
Аналогично сделать чтение и отправку сообщений на серверной стороне.
Исправить все ошибки и протестировать одновременную работу двух приложений.
* Зачем нужен "\n" при передаче сообщений?
* Почему в клиенте и браузере разный ответ по длине строки?
На этом уроке мы ещё раз построчно и подробно разберём написанные программы и поэкспериментируем с "медленным" сервером.
Самостоятельное задание:
Пройтись по написанному коду как клиента так и сервера и тщательно его проанализировать.
Сделать задержку ответов со стороны сервера через Thread.sleep().
Запустить клиента и сервер в командной строке и посмотреть с какой задержкой сервер обрабатывает сообщения клиента.
Выполнить домашнее задание - самостоятельно написать клиент-серверную игру "Угадай число".
Мы познакомились с принципом работы сокетов.
Теперь самое время создать какую-нибудь простую клиент-серверную программку.
На этом уроке мы сформулируем техническое задание.
Попробуйте написать программу самостоятельно.
Самостоятельное задание:
Изучить техническое задание (ТЗ) по реализации единого клиент-серверного приложения калькулятор с параметрами командной строки.
* Попытаться самостоятельно написать универсальный класс для работы программы с двумя конструкторами под клиента и сервера согласно ТЗ.
На этом уроке мы напишем два алгоритма в одной программе: для сервера и для клиента.
Самостоятельное задание:
Создать новый проект с именем Socketor.
В функции main() реализовать элементарную проверку входных параметров.
Создать экземпляр объекта Socketor.
Реализовать проверку, какая программа была запущена: server или client.
В зависимости от этого запустить соответствующий метод run...
Реализовать методы runServer(...) и runClient(...) с учетом необходимых параметров.
Реализовать функцию int calculate(String operation, String a, String b).
* Реализовать класс Phone.
Сделать скриншот о проделанной работе.
В этом коротком уроке мы создадим метод calculate() и очень быстро набросаем скелет класса Phone, используя возможности кодогенерации Intellij Idea.
Самостоятельное задание:
Реализовать метод int calculate(String operation, String a, String b).
В среде разработки Intellij IDEA с помощью сочетания клавиш Alt+Enter освоить способ создания заглушек методов.
Создать заглушки к методам:
void accepted(),
String readLine(),
writeLine(String message),
void close().
Создать заглушки к конструкторам для сервера и клиента:
Phone(String port)
Phone(String ip, String port)
Откомпилировать программу и запустить её.
Отобразить на скриншоте Скелет телефона и результат работы программы.
* Реализовать созданные методы и конструкторы.
На этом уроке мы создадим все методы универсального сокета в классе Phone.
Самостоятельное задание:
Описать клиент серверные переменные в классе и переменные ввода вывода
Написать метод Phone для сервера
Написать метод Phone для клиента
Написать метод Accept()
Создать вспомогательный метод createStreams().
Написать reader и writer для него
Добавить метод в конструктор клиента и accept сервера
Дописать метод readLine()
Дописать метод writeLine()
Реализовать метод close()
Запустить Server с параметрами в IDEA
Запустить клиента из командной строки
Исправить ошибки проверить работу программы
Протестируйте программу в разных режимах.
Придумайте, какую ещё клиент-серверную программу можно написать.
На этом уроке мы поговорим о многопоточности, рассмотрим несколько примеров, когда имеет смысл разделять задачу на потоки, а когда нет. На следующих слайдах мы напишем простой многопоточный сокет для сервера на языке Java
Самостоятельное задание:
Напишите два примера многопоточности: эффективный и неэффективный.
На этом уроке мы создадим простейшую программу с двумя потоками.
Самостоятельное задание:
Создать новый проект с именем ThreadExample
Создать класс с реализацией интерфейса Runnable и написать метод Run()
Реализовать основной класс Main, в котором создать экземпляры классов Worker и Thread
Вызвать метод start() класса Thread
Организовать отдельный поток в виде вечного цикла в основном классе
Запустить программу и убедиться в работоспособности двух потоков
Добавить третий поток и протестировать программу
* Узнать, для чего нужно synchronized и протестировать его работу.
На этом уроке мы создадим коллизию и узнаем, как от неё избавиться.
Самостоятельное задание:
Сделать счётчик до 100 и увеличивать в нём переменную.
Запустить несколько копий этого метода из разных потоков.
Добавить паузу в цикле и получить коллизию.
Сравнить быстрый synchronized метод с длинным.
Почему программа стала медленней работать?
Написать, чем отличается synchronized от volatile.
На этом коротком уроке мы узнаем, как создать поток через функциональное программирование.
Самостоятельное задание:
Создать поток через функциональное программирование.
Удалить строку создания экземпляра класса Worker.
Запустить программу и проанализировать результаты.
Реализовать второй вариант программы путем создания экземпляра worker класса Runnable.
Запустить программу и сравнить её результаты с предыдущими.
Придумать свой вариант примера для метода run().
Напишите о вашем опыте функционального программирования.
На этом уроке мы встроим многопоточность в клиент-серверную программу Socketor и продемонстрируем достигнутый эффект.
Самостоятельное задание:
Смоделировать нагрузку сервера с помощью метода sleep(7000).
Передавать в программу аргументов количество потоков для запуска.
В консольном окне запустить сервер.
Запустить несколько клиентов, каждого в отдельном окне.
Проанализировать результаты работы программы.
Добавить конструктор Phone(Phone phone).
Создать новый класс ServerPhone.
Обновить метод runServer(...), в котором изменить список параметров и организовать цикл по созданию нескольких серверов.
Перенести вечный цикл метода runServer(...) в метод run() класса ServerPhone.
Перенести метод calculate(...) в класс ServerPhone.
Откорректировать входные параметры сервера.
В отдельных окнах запустить сервер и несколько клиентов.
Сравнить общее время работы полученной программы с таким же показателем исходной программы.
Сделать скриншот и выслать отчет на проверку.
Напишите, для чего ещё вы могли бы применить созданный класс Phone?
На этом заключительном видеоуроке мы познакомимся с другим способом создания многопоточного сервера.
Если на предыдущем уроке у нас "крутилось" несколько копий одной программы, то теперь мы будем создавать новый поток при каждом подключении клиента.
Сравните оба варианта и напишите в отчёте, какой подход вам больше понравился и почему.
Самостоятельное задание:
Сделать динамическое формирование потоков при каждом подключении.
Протестировать работу нового варианта на многочисленных клиентах.
Перенести класс Phone в отдельный пакет и подкорректировать его.
Сравнить оба варианта и написать в отчёте, какой вам больше понравился и почему.
Вы узнаете, как можно установить полноценный диалог между двумя программами, которые могут быть размещены и запущены на разных, даже весьма удалённых, компьютерах.
В начале реализуется простейший вариант диалога с двумя разными программами: сервер и клиент.
Базируясь на принципиальных различиях в структурах сервера и клиента, а также наличия в них общего кода, создаётся "универсальный сокет" в виде отдельного класса Phone, который может работать и как сервер, и как клиент.
Разработка программы ведётся в среде Intellij Idea, с помощью которой будут показаны некоторые эффективные приемы кодогенерации.
Во второй части курса мы поговорим о многопоточности, когда она нужна, а когда от неё нет пользы.
Будут рассмотрены основные принципы создания многопоточного приложения, причины возникновения коллизий и способы их разрешения.
После небольшой теоретической подготовки мы добавим многопоточность в созданный сервер написанной программы. И сделаем это двумя разными способами.
В конце курса рассмотрено два способа создания многопоточного сервера.