На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих. Мы будем использовать телефонный класс Phone с прошлого урока.
Дата отправки отчёта:
27 марта 2020 г.
Задание выполнено: за
9 час. 59 мин.
Чему научился:
Ничему новому. Чтобы сделать кнопку "Начать игру" неактивной (см. первый скриншот), нужно свойству TabIndex радиокнопки "Сервер" присвоить значение 0, и так по порядку. Простите, но то, как решался в видеоуроке вопрос "синхронизации данных" - это откровенный костыль. В классе Phone все установленные соединения и открытые потоки нужно корректно завершать и закрывать. Оставлять это без внимания - плохая практика в программировании. Причина несогласованного перехода на следующий уровень заключается ни в каких-то там тайм-аутах (делегат Recv((byte)data) в классе Phone вызывается синхронно (по умолчанию в контексте текущего потока вызывается метод Invoke класса Recv (компилятор по вашему описанию делегата создаёт аж целый класс-делегат!)), и пока он не выполнится, дальнейшее чтение данных невозможно, но никаких ограничений на время его выполнения нет и не было!), а вот в чём: Если вы запустили отдельный поток, то вы не сможете из этого потока обращаться к элементам формы напрямую, так как вам будет выдаваться ошибка. Мол, вы обращаетесь к элементам, которые были созданы в другом потоке. Уберите try-catch - и вы убедитесь в правоте моих слов. Эта ситуация поправима, и мы сейчас рассмотрим решение (см. второй скриншот). В целом же курс не плохой. Мне понравился. Спасибо вам, Евгений Витольдович, за ваш труд!
столько написал, аж непонятно кто у кого учится. Как я понимаю по другому курсу, многие костыли здесь втыкаются намеренно и потом по мере развития проекта устраняются с обучательной целью. Не? Не так?
Молодец, что написал про то какие можно внести изменения даже скрин сделал себе, потом когда доберусь до этой игры обязательно воспользуюсь советом. Спасибо =)
Научился: Передавать данные по сети. Общаться из программы с консолью Трудности: Сфотографировать два компьютера) Или это я пропустил, или это сделано преподавателем намеренно - но я не увидел объяснения, как непосредственно соединить два РАЗНЫХ компьютера по сети. Во всех сетевых уроках мы работали на IP 127.0.0.1 (т.е. на localhost'е). Поэтому для разных компьютеров я придумал решение сам(скорее всего дико неоптимальное) - при инициализации сервера программа открывает консоль и посылает туда запрос "ipconfig", считывает ответ, находит строку, в которой написан IP-адрес, вытаскивает его из этой строки и вставляет в текстовое поле. Далее при нажатии на кнопку запуска игры появляется сообщение о том, какой IP-адрес нужно сообщить клиенту. Как-то так.
P.S. Не очень получилась фотография двух компьютеров.
Научился: Очень интересно исследовать, как работают классы между собой. Трудности: Так писать программу - совсем просто. Но так все соединить вместе - очень сложно.
Интересно придумано с синхронной сменой уровней! Ух! Вот это урок! Столько всего важного и интересного. Удивительно, что класс phone передает всего то по одному байтику. А наши человечки бегают уже вместе! Спасибо за замечательный курс. Все очень понравилось!