Обучение 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
Отчёт отправил: 20167. Айдар Выполнено за 29 мин. [Показать отчёт]
Научился: 1. Клиент-серверное приложение - распределённая программа, состоящая из центральной части - сервера, который обрабатывает запросы клиентской части данной программы, которая в свою очередь отправляет запросы и получает информацию от сервера. 2.  Сокет - программный интерфейс (не путать с интерфейсами в ООП), который обеспечивает взаимодействие между приложениями по сети, посредством взаимодействия с протоколами TCP/IP. Серверный сокет - сокет, который обычно работает в режиме "слушателя" на заданном порту, представляет собой пару (IP-адрес; порт), по которым можно получить доступ к серверу. IP-адрес - сетевой адрес хоста, на котором расположено приложение. порт - номер, зарезервированный ОС, по которому можно получить доступ к заданному приложению  на данном конкретном хосте или отправить данные с заданного хоста. сокет - программный интерфейс,  который задаётся парой (IP-адрес, порт), для взаимодействия между приложениями по сети. 
2 Простейший сервер 00:07:20
2 теста
22 чел. ★ 5 Done
  На этом уроке мы создадим простейший сервер, который будет принимать подключения от клиентов и проверим его работу из  телнета и браузера.
Отчёт отправил: 20167. Айдар Выполнено за 20 мин. [Показать отчёт]
Научился: 1.  Во время выполнения Accept() сокет,  переходит в режим прослушивания, ожидания подключения клиента по соотв. номеру порта. (Протокол TCP для этого сокета переходит в состояние Listen). 2. IP-адрес при конфигурации серверного сокета  вообще не обязателен. Хотя при желании это можно сделать, но адрес 127.0.0.1 (Local Host) указывать совершенно некорректно. 
3 Автоответчик 00:10:27
1 тест
21 чел. ★ 4.9 Done
  На этом слайде мы напишем сервер-автоответчик, который всем клиентам будет отправлять одно и тоже сообщение.
Отчёт отправил: 20167. Айдар Выполнено за 1 час. 11 мин. [Показать отчёт]
Научился: Сервер работает и отправляет ответное сообщение. Уже похоже на полноценный сервер Движемся дальше :) 
4 Правильный заголовок 00:06:26
2 теста
13 чел. ★ 5 Done
  На этом дополнительном слайде мы сформируем правильный HTTP-ответ,
который будет выдавать наш сервер, чтобы даже привередливые браузеры смогли бы его отобразить.

Отчёт отправил: 20167. Айдар Выполнено за 1 час. 16 мин. [Показать отчёт]
Научился: Добавил в параметры заголовка св-во Content-Length, разобрался как поменять цвет http заголовка. 
5 Как хорошо уметь читать! 00:10:20
1 тест
18 чел. ★ 5 Done
  На этом слайде мы создадим клиента, который сможет прочитать сообщение от сервера.
Отчёт отправил: 20167. Айдар Выполнено за 1 час. 5 мин. [Показать отчёт]
Научился: Чтобы запустить клиентский сокет несколько раз, я поместил весь алгоритм в отдельный статический метод ClientRun() и в методе Main запустил его в цикле. Для нового метода также нужно не  забыть дописать throws IOException. 
6 Клиент-серверный диалог 00:14:14
15 чел. ★ 5 Done
  На этом слайде мы обеспечим полноценное общение между клиентом и сервером через сокет
Отчёт отправил: 20167. Айдар Выполнено за 43 мин. [Показать отчёт]
Научился: Переход на новую строку при помощи \n или метода newline необходим для обозначения, что строка завершена и сформирована, чтобы reader сервера эту строку мог прочитать. Запрос от браузера на установление соединения составляет 14 символов. Для интереса я вывел этот запрос в консоль - "GET / HTTP/1.1" 
7 Экспериментальный сервачок 00:12:25
1 тест
14 чел. ★ 5 Done
  На этом уроке мы ещё раз построчно и подробно разберём написанные программы и поэкспериментируем с "медленным" сервером. Самостоятельное задание - написать клиент-серверную игру "Угадай число".
Отчёт отправил: 20167. Айдар Выполнено за 1 день 10 час. 41 мин. [Показать отчёт]
Научился: Реализовал работу клиент-сервера "Угадай число". Сервер рандомно загадывает число, клиент также рандомно пытается его отгадать. Работа клиента также помещена в цикл while(true), который прерывается при правильном ответе. 
Сложности: Не уверен, что такая реализация лучшая, так как клиент может отправлять запросы с одним и тем же числом. 
8 Техническое задание 00:06:25
11 чел. ★ 5 Done
  Мы познакомились с принципом работы сокетов.
Теперь самое время создать какую-нибудь простую клиент-серверную программку.
На этом видео мы сформулируем техническое задание.
Попробуйте самостоятельно написать программу по ТЗ.
Отчёт отправил: 20167. Айдар Выполнено за 1 день 4 мин. [Показать отчёт]
Научился: Программа реализована. Буду пытаться её улучшить при просмотре дальнейших видео-уроков. 
Сложности: Понять и придумать корректную логику работы вспомогательных методов. Не удалось обойтись без обработки исключений в методе Main (throws IOException). В целом программа выглядит сумбурно, нужен рефакторинг ) 
Видеообзор: uWK_3-V8cRU
9 Основной алгоритм 00:13:05
11 чел. ★ 5 Done
  На этом слайде мы напишем два алгоритма в одной программе: для сервера и для клиента.
Отчёт отправил: 20167. Айдар Выполнено за 2 дня 22 час. 11 мин. [Показать отчёт]
Научился: Внёс некоторые изменения в уже реализованную программу: 1. Проверка на кол-во аргументов. 2.  В метод Calculate добавил 3-й аргумент для определения типа операции Класс Phone у меня уже реализован под названием Socketor 
10 Скелет телефона 00:03:37
1 тест
11 чел. ★ 5 Done
  На этом коротком слайде мы создадим метод calculate() и очень быстро набросаем скелет класса Phone, используя возможности кодогенерации Intellij Idea.
Отчёт отправил: 20167. Айдар Выполнено за 10 мин. [Показать отчёт]
Научился: Класс Phone я уже создал самостоятельно, у меня он остался под названием Socketor, метод Calculate также был создан. Пока всё соответствует реализации программы в видеокурсе. Немного потренировался работе функционала создания заглушек InteliJ IDEA  
11 Универсальный сокет 00:15:27
11 чел. ★ 5 Done
  На этом слайде мы создадим все методы универсального сокета в классе Phone.
Протестируйте программу в разных режимах.

Придумайте, какую ещё клиент-серверную программу можно написать.
Отчёт отправил: 20167. Айдар Выполнено за 1 час. 46 мин. [Показать отчёт]
Научился: Сделал полный рефакторинг своей программы, созданной ранее. По методике, представленной в видео, сделал отдельный класс Phone, в который вынесена вся сетевая логика и работа с I/O потоками. Так получилось более логично и структурировано.  
Сложности: Добавил обработку исключения при делении на ноль для функции Calculate(), теперь в консоль выводится соответствующее сообщение. Но пока не понял, как реализовать, отправку этого сообщения клиенту. 
12 ФИНАЛЬНЫЙ УРОК без видео
1 тест
11 чел. ★ 5 Done
  Оставьте отзыв об этом миникурсе и отчитайтесь за самостоятельное задание.
Отчёт отправил: 20167. Айдар Выполнено за 10 мин. [Показать отчёт]
Научился: Отличный видеокурс, довольно краткий, но по сути. Очень хорошо, что в данном курсе много самостоятельных заданий, причём комплексных, например, полностью написать программу. В процессе дальнейшего рефакторинга своей собственной программы, приходит понимание правильно подхода к построению такого рода приложений. Буду проходить дальше, интересна реализация многопоточности. 
Видеообзор: 1I_asBLGkhE
13 FREE VIP. Многопоточность 00:11:34
10 чел. ★ 4.6 Done
  На этом слайде мы поговорим о многопоточности, рассмотрим несколько примеров, кода имеет смысл разделять задачу на потоки, а когда нет. На следующих слайдах мы напишем простой многопоточный сокет для сервера на языке Java
Отчёт отправил: 20167. Айдар Выполнено за 26 мин. [Показать отчёт]
Научился: Многопоточность эффективна, например, в банке - при наличии нескольких банкоматов очередь движется гораздо быстрее. Многопоточнось будет неэффективна при запуске сети или узла связи - необходима строгая последовательность этапов - осмотр площадки - дизайн сети - производство и доставка оборудования - монтаж - пусконаладка - интеграция - приёмосдаточные испытания. Из профессионального опыта :)  
14 VIP. Два потока 00:10:49
1 тест
9 чел. ★ 5 Done
  На этом слайде мы создадим простейшую программу с двумя потоками.
Отчёт отправил: 20167. Айдар Выполнено за 1 день 1 час. 6 мин. [Показать отчёт]
Научился: Для реализации задания вывод третьего потока, я создал ещё один Runnable класс, и передал его в отдельный поток. Synchronized реализует поочерёдный доступ к ресурсам. В определённый момент только один из синхронизированных потоков имеет доступ к блокам памяти. 
15 VIP. Синхрофазатрон 00:14:00
9 чел. ★ 5 Done
  На этом слайде мы создадим коллизию и узнаем, как от неё избавиться.
Отчёт отправил: 20167. Айдар Выполнено за 9 час. 31 мин. [Показать отчёт]
Научился: Поэкспериментировали с потоками и коллизиями. Synchronized метод подразумевает, что он может выполняться только одним процессом в данный момент. Св-во переменной volatile означает, что доступ или изменение данной переменной происходит тут же, без ожидания завершения операций над переменной другими потоками. Время работы программы увеличилось из-за того, что в Synchronized метод next кроме основных операций была добавлена пауза Thread.sleep(10).  
16 VIP. Функциональное потокообразование 00:04:52
2 теста
9 чел. ★ 5 Done
  На этом коротком слайде мы узнаем, как создать поток через функциональное программирование.
Отчёт отправил: 20167. Айдар Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: Очень интересная тема. Только сегодня где-то видел функциональный код на С#, там вроде бы оператор => {} используется. 
Сложности: Хотел вывести номер потока в консоль, пока не вышло. Буду думать дальше ) 
17 VIP. Мультики на сервере 00:22:02
1 тест
9 чел. ★ 5 Done
  На этом слайде мы встроим многопоточность в клиент-серверную программу Socketor и продемонстрируем достигнутый эффект.
Отчёт отправил: 20167. Айдар Выполнено за 7 час. 26 мин. [Показать отчёт]
Научился: Очень интересный урок, получил опыт реализации многопоточности в работающем приложении.  
18 VIP. Динамичная многопоточность 00:30:24
9 чел. ★ 5 Done
  На этом заключительном видеоуроке мы познакомимся с другим способом создания многопоточного сервера.
Если на предыдущем уроке у нас "крутилось" несколько копий одной программы,
то теперь мы будем создавать новый поток при каждом подключении клиента.

Сравните оба варианта и напишите в отчёте, какой подход вам больше понравился и почему.
Отчёт отправил: 20167. Айдар Выполнено за 2 час. 51 мин. [Показать отчёт]
Научился: Реализовали динамический способ создания потоков, который мне понравился больше. В целом урок очень интересный - затрагивается много аспектов - работа с командной строкой, bat-файлами, настройками IntelijIdea ну и конечно, рефакторинг нашей программы. Спасибо за интересный видеокурс! Хороший импульс для дальнейшего изучения многопоточности и асинхронного программирования. :) 
  Итого:   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