Обучение c# видеоуроки

Формула программиста

основатель — Волосатов Евгений Витольдович

Клуб формулистов - Ежемесячная подписка

Вступление в Клуб Формулистов на выгодных условиях для НОВЫХ участников.

После взноса  999  499 руб. вы получите подписку
в Клуб Формулистов на 30 дней и 256 байт для быстрого старта.
Байты используются для открытия более одного урока в день, по 50 байт за урок.

Стоимость 1 дня за первый месяц: всего 16 рублей.

Первый взнос - 499 руб./30 дней.

Через 30 дней будет списано 3,000 2,400 руб.
за продление подписки в Клуб на 30 дней + подарок 512 байт.

Так будет продолжаться каждые 30 дней, пока вы не отмените подписку.
Средства будет автоматически считываться с вашей карты.
Вы в любой момент сможете отказаться от продления Клуба.

Только ДО КОНЦА НЕДЕЛИ -
-50% скидка на первый взнос, всего 499 (вместо 999) рублей!
-20% скидка на ЕЖЕМЕСЯЧНЫЙ платёж!
Всего 2400 руб/месяц (вместо 3000 руб/месяц), или 80 руб./день - цена чашки кофе.


Стоимость 1 дня: 80 руб.

Хочу вступить!

Также есть другие варианты оплаты участия в КФ:

Билет в клуб формулистов на ...
30+ дней | 60 дней | 150 дней | 380 дней | 1000 дней

Внимание!
Стоимость участия в Клубе формулистов увеличивается 1 числа каждого месяца на 100 рублей.
При оформления подписки стоимость остаётся постоянной, пока подписка не будет отменена.







Первый взнос - 499 руб./30 дней + 500 байт.
Последующие взносы - 3,000 2400 руб./месяц + 512 байт.



Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE Что такое сокет 00:09:10
2 теста
31 чел. ★ 4.7 Done
  В этой серии видеоуроков мы подробно разберём принципы работы клиент-серверных программ на основе сокетов и напишем небольшую демонстрационную программу.

Рекомендую ознакомиться со статьёй:
http://qaru.site/questions/12999/what-is-the-difference-between-a-port-and-a-socket
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 38 мин. [Показать отчёт]
Научился: Клиент-серверное приложение - это программа, обеспечивабщее обмен информацией между двумя компьютерами.  
Сложности: Сокет (англ. socket — разъём) — название программного интерфейса для обеспечения обмена данными между процессами. серверный сокет - это класс, обеспечивающий серверный функционал для прослушивания клиентов. клиентский сокет - это класс, обеспечивающий клиентский функционал для для обращения к серверу. IP, порт, сокет - уникальные данные данного компьютера необходимые для подключения к серверу.  
2 Простейший сервер 00:07:20
2 теста
22 чел. ★ 5 Done
  На этом уроке мы создадим простейший сервер, который будет принимать подключения от клиентов и проверим его работу из  телнета и браузера.
Отчёт отправил: 11589. Yefim Выполнено за 12 час. 29 мин. [Показать отчёт]
Научился: Создавать простейший сервер на Java 
Сложности: Проверка через командную строку не прошла, так как telnet не был установлен. Нашел в интернете решение и всё потом получилось. 
3 Автоответчик 00:10:27
1 тест
21 чел. ★ 4.9 Done
  На этом слайде мы напишем сервер-автоответчик, который всем клиентам будет отправлять одно и тоже сообщение.
Отчёт отправил: 11589. Yefim Выполнено за 11 час. 52 мин. [Показать отчёт]
Научился: Создавать сервер-автоответчик, который всем клиентам отправляет одно и тоже сообщение. Отличный урок. 
Сложности: Всё получилось!!!  
4 Правильный заголовок 00:06:26
2 теста
13 чел. ★ 5 Done
  На этом дополнительном слайде мы сформируем правильный HTTP-ответ,
который будет выдавать наш сервер, чтобы даже привередливые браузеры смогли бы его отобразить.

Отчёт отправил: 11589. Yefim Выполнено за 30 мин. [Показать отчёт]
Научился: Формировать правильный HTTP-ответ. 
Сложности: Всё получилось! 
5 Как хорошо уметь читать! 00:10:20
1 тест
18 чел. ★ 5 Done
  На этом слайде мы создадим клиента, который сможет прочитать сообщение от сервера.
Отчёт отправил: 11589. Yefim Выполнено за 1 час. 36 мин. [Показать отчёт]
Научился: Создавать клиента, который может прочитать сообщение от сервера. 
Сложности: Всё получилось!!! 
6 Клиент-серверный диалог 00:14:14
15 чел. ★ 5 Done
  На этом слайде мы обеспечим полноценное общение между клиентом и сервером через сокет
Отчёт отправил: 11589. Yefim Выполнено за 1 час. 42 мин. [Показать отчёт]
Научился: Обеспечивать полноценное общение между клиентом и сервером.  
Сложности: Общение между клиентом и сервером между программами на Java проходит нормально. В браузере chrome требуются дополнительные строки: "HTTP:/1.0 200OK\n" +           "Content type text/html\n" +           "\n"; Непонятно, почему в видео всё проходит без этих строк. Непонятно, почему в telnet длина строки рана нулю. Почему в клиенте и браузере разный ответ по длине строки? Могу предположить: возможно, в баузере используется уникод.  
7 Экспериментальный сервачок 00:12:25
1 тест
14 чел. ★ 5 Done
  На этом уроке мы ещё раз построчно и подробно разберём написанные программы и поэкспериментируем с "медленным" сервером. Самостоятельное задание - написать клиент-серверную игру "Угадай число".
Отчёт отправил: 11589. Yefim Выполнено за 1 день 14 час. 20 мин. [Показать отчёт]
Научился: Самостоятельно создавать клиент-серверную игру "Угадай число". 
Сложности: Были проблемы с установкой Java-11 
8 Техническое задание 00:06:25
11 чел. ★ 5 Done
  Мы познакомились с принципом работы сокетов.
Теперь самое время создать какую-нибудь простую клиент-серверную программку.
На этом видео мы сформулируем техническое задание.
Попробуйте самостоятельно написать программу по ТЗ.
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 2 мин. [Показать отчёт]
Научился: В принципе, мне ясно как писать эту программу. На скриншоте в начале приведено техническое задание по видео, а затем мой вариант.  
Сложности: Моя Java11 не принимает Java Socketor, а Java Socketor.java работает.  Поскольку нас призывают к максимальному упрощению и мы используем всегда порт 8000 и ip для клиента 127.0.0.1, то указывать их в качестве параметров нет необходимости. Кроме того, мне показалось более логичным в запросе клиента указывать также и операцию и тогда, если программа запускается без параметров, то работает сервер, а если с параметром, то клиент. С учетом сказанного моё ТЗ выглядит так: Java MySocketor.java >>Server started >>Accepted client: 45 + 35 = 80. Java MySocketor.java 45 + 35 >>Sending request 45 + 35 >>Getting result 80  
9 Основной алгоритм 00:13:05
11 чел. ★ 5 Done
  На этом слайде мы напишем два алгоритма в одной программе: для сервера и для клиента.
Отчёт отправил: 11589. Yefim Выполнено за 15 час. 34 мин. [Показать отчёт]
Научился: Реализовывать два алгоритма (для сервера и для клиента) в одной программе. 
Сложности: Непонятно почему в разделе Самостоятельная работа   1. (no items) Как это не покажется парадоксальным, но моя функция calculate(String operation, String a, String b) возвращает строку. При этом можно учесть нестандартные ситуации, такие как некорректная операция или деление на нуль.  
10 Скелет телефона 00:03:37
1 тест
11 чел. ★ 5 Done
  На этом коротком слайде мы создадим метод calculate() и очень быстро набросаем скелет класса Phone, используя возможности кодогенерации Intellij Idea.
Отчёт отправил: 11589. Yefim Выполнено за 11 час. 22 мин. [Показать отчёт]
Научился: Описание задания к уроку отсутствует.  Привожу свой вариант описания. 
Сложности: Описание задания к уроку Скелет телефона 1. Реализовать метод int calculate(String operation, String a, String b). 2. В среде разработки Intellij IDEA с помощью сочетания клавиш Alt  +Enter освоить способ создания заглушек методов. 3. Создать заглушки к методам: void accepted(), String readLine(), writeLine(String message), void close(). 4. Создать заглушки к конструкторам для сервера и клиента:    Phone(String port), Phone(String ip, String port) 5. Откомпилировать программу и запустить её. 6. Отобразить на скриншоте Скелет телефона и результат работы программы. 7. *Реализовать созданные методы и конструкторы.  
11 Универсальный сокет 00:15:27
11 чел. ★ 5 Done
  На этом слайде мы создадим все методы универсального сокета в классе Phone.
Протестируйте программу в разных режимах.

Придумайте, какую ещё клиент-серверную программу можно написать.
Отчёт отправил: 11589. Yefim Выполнено за 6 час. 45 мин. [Показать отчёт]
Научился: Создавать методы универсального сокета в классе Phone 
Сложности: Всё получилось!!! 
12 ФИНАЛЬНЫЙ УРОК без видео
1 тест
11 чел. ★ 5 Done
  Оставьте отзыв об этом миникурсе и отчитайтесь за самостоятельное задание.
Отчёт отправил: 11589. Yefim Выполнено за 11 час. 20 мин. [Показать отчёт]
Научился:       Курс Клиент-серверный сокет на языке Java показывает как можно установить не просто связь между двумя программами, а реализовать полноценный диалог между ними. Примечательно, что эти программы могут быть размещены на разных, даже весьма удалённых, компьютерах. В начале был реализован простейший вариант диалога с двумя разными программами: сервер и клиент. Базируясь на принципиальных различиях в структурах сервера и клиента и наличия в них некоторого общего кода, в конце курса был создан Универсальный сокет в виде одной программы. При этом в зависимости от способа запуска программы, она знает какую роль: сервера или клиента ей приходится играть.         Разработка программы велась в среде Intellij Idea, с помощью которой были показаны некоторые эффективные приемы кодогенерации. Тестирование сокета проводилось на примере простейшего калькулятора с 4-мя арифметическими операциями. В моем варианте я добавил операцию деления с остатком и сделал проверку деления на ноль. Тестирование работоспособности программы осуществлялась различными способами: в среде разработки, в браузере и в консоли.     Курс мне очень понравился. Большое спасибо его создателю - Волосатову Евгению Витольдовичу, а также всем тем, кто откликался на вопросы, возникшие у меня по ходу прохождения курса.  
Сложности: ---- 
13 FREE VIP. Многопоточность 00:11:34
10 чел. ★ 4.6 Done
  На этом слайде мы поговорим о многопоточности, рассмотрим несколько примеров, кода имеет смысл разделять задачу на потоки, а когда нет. На следующих слайдах мы напишем простой многопоточный сокет для сервера на языке Java
Отчёт отправил: 11589. Yefim Выполнено за 23 час. 4 мин. [Показать отчёт]
Научился: Различать когда имеет смысл разделять задачу на потоки, а когда нет.  
Сложности: Помню в студенческие годы, после долгой сибирской зимы, хотелось ускорить приход весны, а громадные сугробы снега таяли не очень охотно.  Мы разделяли сугробы на меньшие части (отдельные потоки) и наглядно был виден результат разделения процесса на потоки. В тоже время не тронутые сугробы ещё долгое время продолжали своё существование. В программистскую фирму поступил срочный заказ на изготовление сложной программы требующей некой новой технологии Х. Однако в фирме всего один специалист, владеющий технологией Х. Поэтому распределение работы между несколькими программистами не даст необходимого эффекта. 
14 VIP. Два потока 00:10:49
1 тест
9 чел. ★ 5 Done
  На этом слайде мы создадим простейшую программу с двумя потоками.
Отчёт отправил: 11589. Yefim Выполнено за 3 час. 41 мин. [Показать отчёт]
Научился: Для класса Worker я создал конструктор с 2 мя параметрами именем потока и временем ожидания  
Сложности: 1. Создать новый проект с именем ThreadExample 2. Создать класс с имлементацией интерфейса Runnable и реализовать в нем метод Run(); 3. Реализовать основной класс Main, в котором создать экземпляры классов Worker и Thread. 4. Вызвать метод start() класса Thread. 5. Организовать отдельный поток в виде вечного цикла в основном классе. 6. Запустить программу и убедиться в работоспособности двух потоков. 7. Добавить третий поток и протестировать программу.  
15 VIP. Синхрофазатрон 00:14:00
9 чел. ★ 5 Done
  На этом слайде мы создадим коллизию и узнаем, как от неё избавиться.
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 54 мин. [Показать отчёт]
Научился: Синхронизировать потоки 
Сложности: Описание урока 1. Обновить класс Worker: добавить счётчик count и заменить вечный цикл конечным, где вывести на экран номер итерации и значение счётчика.. 2. Обновить основной класс Main: создать экземпляр класса Worker и с его помощью 5 безымянных экземпляров класса Thread. 3. Запустить программу и проанализировать результаты. 4. Дополнить класс Worker, добавив паузу sleep(10). 5. Запустить программу и сравнить новые результаты с предыдущими. 6. Устранить возникшую коллизию добавлением в класс Worker метода synchronized void next(). 7. Запустить программу и убедиться в отсутствии коллизии. 8. Поэкспериментировать с различными вариантами функции next(). 9. Объяснить в каких случаях и почему происходит замедление работы программы. 10. Сделать скриншот и выслать отчет на проверку. 
16 VIP. Функциональное потокообразование 00:04:52
2 теста
9 чел. ★ 5 Done
  На этом коротком слайде мы узнаем, как создать поток через функциональное программирование.
Отчёт отправил: 11589. Yefim Выполнено за 4 час. 52 мин. [Показать отчёт]
Научился: Узнал, как создать поток через функциональное программирование. Не понял в чем его преимущество. 
Сложности: Описание задания 1. В классе Main при создании экземпляра класса Thread заменить параметр worker на "волшебные скобочки" ()->{...}, прописав функционал метода run(). 2. Удалить строку создания экземпляра класса Worker. 3. Запустить программу и проанализировать результаты. 4. Реализовать второй вариант программы путем создания экземпляра worker класса Runnable. 5. Запустить программу и сравнить её результаты с предыдущими. 6. Придумать свой вариант примера для метода run(). 7. Сделать скриншот и выслать отчет на проверку.  
17 VIP. Мультики на сервере 00:22:02
1 тест
9 чел. ★ 5 Done
  На этом слайде мы встроим многопоточность в клиент-серверную программу Socketor и продемонстрируем достигнутый эффект.
Отчёт отправил: 11589. Yefim Выполнено за 18 час. 16 мин. [Показать отчёт]
Научился: Встраивать многопоточность в клиент-серверную программу Socketor. 
Сложности: Описание задания к уроку 1. Смоделировать загрузку сервера с помощью метода sleep(7000). 2. В консольном окне запустить сервер. 3. Запустить несколько клиентов, каждого в отдельном окне. 4. Проанализировать результаты работы программы. 5. Добавить конструктор Phone(Phone phone). 6. Создать новый класс ServerPhone. 7. Обновить метод runServer(...), в котором изменить список параметров и организовать цикл по созданию нескольких серверов. 8. Перенести вечный цикл метода runServer(...) в метод run() класса ServerPhone. 9. Перенести метод calculate(...) в класс ServerPhone. 10. Откорректировать входные параметры сервера. 11. В отдельных окнах запустить сервер и несколько клиентов. 12. Сравнить общее время работы полученной программы с таким же показателем исходной программы. 13. Сделать скриншот и выслать отчет на проверку.  
18 VIP. Динамичная многопоточность 00:30:24
9 чел. ★ 5 Done
  На этом заключительном видеоуроке мы познакомимся с другим способом создания многопоточного сервера.
Если на предыдущем уроке у нас "крутилось" несколько копий одной программы,
то теперь мы будем создавать новый поток при каждом подключении клиента.

Сравните оба варианта и напишите в отчёте, какой подход вам больше понравился и почему.
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 54 мин. [Показать отчёт]
Научился: Создавать динамически новый поток при каждом подключении клиента. Организовывать динамически новые величины в bat Файле.  
Сложности: Урок отличный. Однако создавать новый поток при каждом подключении клиента и не закрывать его при завершении его работы, полагаясь лишь на механизм очистки мусора, слишком рискованно. 
  Итого:   18 видеоуроков 3 час. 22 мин.
15 тестов
9 чел. ★ 4.96  
  Финалисты:   Yefim,   Chip,   Иван Воронин,   Tekashnik,   Александр,   vip,   Айдар,   Dmitry Sinitsin,   Anatoli .

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Уже изучал ранее сокеты, всё-равно было интересно. Курс классный, рекомендую его всем для прохождения!
Трудности: Заплатил за этот отзыв 50 байт. Идём дальше!



Научился: Клиентский метод .getInputStream().read() читает один символ, тогда как класс-обёртка для чтения данных - InputStreamReader способен читать уже строку. Применили цепочку из создания объектов, на вершине которой классы BufferedReader и BufferedWriter, способные к чтению и созданию полных строк, которые передавались через сетевой протокол между клиентом и сервером. Приложение для обмена, обработки Сервером полученного, и выведения на экран результата отправки-обработки-приёма реализовывалось как в рамках одного класса (это при том, что запуск доступен в двух ролях Сервера или Клиента), так и в двух классах. Первый класс Socketor имеет точку входа в программу, отвечает за выбор роли, в которой запускается сокет (сервером или клиентом). При каждом запуске создаёт новый экземпляр класса и в зависимости ОТ КОЛИЧЕСТВА принятых от пользователя аргументов запускает: метод runServer в роли Сервера или метод runClient в роли Клиента. =============== Метод runServer создает СОКЕТ - новый экземпляр класса Phone принимая аргументом номер порта для работы. В бесконечном цикле запускается метод приёма входящих пакетов извне. В первой полученной строке записывает строковую переменную a. Во второй полученной строке записывает строковую переменную b. В целочисленную переменную записывает результат работы метода калькуляции, принимающего аргументами (все строкового типа) знак математической операции, а и b - числа для математической операции. О полученном решении создаётся строковая переменная, которая: - выводится на экран в консоли Сервера методом System.out.println - передаётся Клиенту для вывода на экран методом phone.writeLine После вывода на экран соединение с Клиентом закрывается и Сервер возвращается циклом к ожиданию нового входящего соединения. В этом же цикле реализована проверка деления на ноль. ================ Метод калькуляции парсит в целые числа полученные строковые аргументы, и в зависимости от типа операции возвращает целочисленные результат расчётов. ================ Метод runClient принимает строковые аргументы: - сетевой адрес - номер порта - а и b - числа для математической операции. Создаётся экземпляр сокета с двумя аргументами (адрес и порт). Сокет Клиента построчно отправляет а и b - числа для математической операции. Затем с помощью метода readLine() Клиент получает результат вычислений и выводит его в консоль на экран. ################ Второй класс Phone занимается реализацией сокетов Сервера и Клиента. Здесь же составлена матрёшка экземпляров классов, способных обрабатывать строковые символы и целые строки из сетевого трафика. Во всех методах класса Phone применен отлов ошибок try-catch