|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
Поток в настоящее время используется предыдущей версией потока27.10.2024, 00:31. Показов 5029. Ответов 64
Метки нет (Все метки)
Здравствуйте, уважаемые программисты! Писал клиент и сервер. Идея такова, что выбирается listView элемент, затем нажимается кнопка Button1 и сервер отправляет на клиента команду, клиент принимает ее и в ответ шлет сначала эту же команду, затем число строк из своего listView, а затем в цикле пересылаются все строки. Так вот, при первом нажатии срабатывает нормально, результат можно видеть на картинке, а при втором нажатии вылезает ошибка из названия темы. Помогите, кто может, как избавиться от этой ошибки? В архиве прикрепляю проекты Visual Studio клиента и сервера.
0
|
|
| 27.10.2024, 00:31 | |
|
Ответы с готовыми решениями:
64
В некоторых странах Дальнего Востока (Китае, Японии и др.) использовался (и неофициально используется в настоящее время) В некоторых странах Дальнего Востока (Китае, Японии и др.) использовался (и неофициально используется в настоящее время) Какие на ваш взгляд ОС Windows являются провальными по сравнению с предыдущей версией и почему? |
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
| 08.11.2024, 20:10 [ТС] | |
|
0
|
|
|
|
||
| 09.11.2024, 07:52 | ||
|
Не по теме: Волков бояться, в лес не ходить. С чем сложности? Разбить на потоки? Никапсулировать подключение к конкретному клиенту в отдельный класс? Создать потокобезопансую коллекцию? Передать её по ссылке в другой класс для бизнес логики?
0
|
||
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
| 10.11.2024, 06:09 [ТС] | |
|
Wolfdp, Что такое фабрика, потокобезопасная коллекция, агрегатор, MQ, Handlers?
0
|
|
|
|
||||||
| 10.11.2024, 11:18 | ||||||
|
Конкретно фабрику можно и не делать, не самый критичный элемент. Также всегда можно обернуть нужную логику аля List (Add, Remove, ForEach) в свой кастомный класс, который внутри будет всё выполнять через тот же lock, аще лучше ReadWriteLock. Не по теме: Немного ввел в заблуждение, т.к. общепринято этот термин чаще применяется к методам работы с коллекциями. На одном месте работы у нас этим термином обозначался подход, когда мы в одном классе аккумулировали разную логику используя другие классы. Если на пальцах: - разбиваем весь скоп задач на логические группы (например сохранение данных в БД/файл; обработка данных; мониторинг; формирование запросов внешнему API). - всё это инкапсулируется по отдельным классам. Т.е. за сохранение в БД должен отвечать только один класс, и он должен уметь только сохранять в БД (можно дополнительно раздробить по таблицам). - есть "супер класс", который будет инициализировать все эти объекты, стартовать их работу и обеспечивать взаимодействие друг-с-другом через подписки на event или передачу в конструктор/свойства В идеале такого нужно избегать, но для этого нужен ioc-контейнер. - я сменил статус на "красный/синий" - запрос "какой статус у остальных?" Допустим изначально нам нужно просто запоминать какой у клиента статус и отправлять по запросу общий статус. Значит у нас два подписчика: - тот который возьмёт текущего клиента и поменяет ему статус - тот который посмотрит общий список и ответит клиенту Через время решили логировать. Тупо добавляем подписчика на первое сообщение и пишем в БД. Через время решили что если все перешли в статус "красный" -- отправляем уведомления по email. Плюс один подписчик, который никак не задевает уже существующие. Можно обойтись и без него.
0
|
||||||
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
| 12.11.2024, 00:01 [ТС] | |
|
Wolfdp, Прочитал про потокобезопасные коллекции. И какую из них использовать? ConcurrentBag<T>? И в нее должны закидываться clientobject (session)?
Добавлено через 19 минут И все-таки, мне интересно, как например на предприятии разворачивать подобную систему. Есть например 250 клиентских ПК и 1 сервер. Это надо заставить сисадмина оббежать все 250 ПК и там вбить в настройки IP-адрес сервера везде?
0
|
|
|
2410 / 1948 / 764
Регистрация: 27.07.2012
Сообщений: 5,584
|
||
| 12.11.2024, 00:15 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
| 12.11.2024, 03:57 [ТС] | |
|
Пытаюсь вызвать tcpListener?.Dispose(); и визуал студио пишет ошибку: tcpListener не содержит определения Dispose, и не удалось найти доступный метод расширения Dispose, принимающий тип tcpListener в качестве первого аргумента.
0
|
|
|
|
||||
| 12.11.2024, 05:09 | ||||
|
Не по теме: Ага, а когда выпускают онлайн игру, специальный посыльный на специальных гончих собаках оббегает всех игроков, что устанавливают клиент себе на ПК и прописывает им IP игрового сервера. IP прописывается в настройках. Настройки нужно делать так, чтобы клиент мог их подправить самостоятельно. Более кошерный подход указывать не IP, а доменное имя (услуга чаще платная). Дабы упростить себе жизнь, в проектах C# существует понятие "конфигурация" и по умолчанию создаются две: DEBUG и RELEASE. Для них можно прописать две независимые настройки, которые будут применяться автоматически. Как результат, пока вы разрабатываете, то ссылаетесь скажем на 127.0.0.1, а когда делаете финальный билд для рассылки бухам -- просто переключаетесь на RELEASE и отдаете соответствующий файл. - осознанно прочитать что написано. - глянуть документацию по той версии, которую используете. - погуглить или использовать AI-чат. Желательно именно в такой последовательности.
0
|
||||
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|||
| 12.11.2024, 05:48 [ТС] | |||
|
Либо второй вариант, что сначала компания покупает продукт, потом у себя конфигурируют на нужный ip-шник и потом клонирует приложение и ставит на свои компьютеры. По поводу онлайн-игры тоже неизвестно, как оно там работает.
0
|
|||
|
|
|||
| 12.11.2024, 06:20 | |||
|
Самый простой способ -- написать подробную инструкцию на всё и вся. Чуть кошерней -- выделить техподдержку. Не по теме:
Рассматривайте форум как "последняя инстанция", когда сами не смогли найти через документацию или простой поиск и AI-чат выдает нерабочую ерунду.
0
|
|||
| 12.11.2024, 17:14 | ||
|
Не по теме:
Если говорить про подготовку софта, то как писал выше: либо править файл конфигов, либо собирать нужный msi. Как вариант можно на вход установщика передавать набор необязательных параметров, которые пропишут в конфигах нужное.
0
|
||
|
|
|
| 12.11.2024, 17:49 | |
|
Wolfdp, в целом то согласен.
Просто, относительно автора вопроса существуют трудности в виде весьма малых знаний в программировании как таковом, не говоря уже о сетевом уровне, меж-поточном взаимодействии. Ну и конечно же, такие вещи как MSI и вообще установщики - темный лес. Оаг, без обид - честная критика: при первом взгляде только на форму (макет WinForms) с неподписанными кнопками и очень странными размерами/компоновкой элементов, становится ясно, что за среду программирования посадили школьника в первый раз. В этом случае сложновато что-то дельное советовать, вернее, советовать то можно, но эти советы принесут 0.001% пользы. Без хорошей такой базы тут не обойтись, а обучать этому на форуме ессесно вряд ли кто возьмется.
0
|
|
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
| 12.11.2024, 18:50 [ТС] | |
|
wizard41, Это правда, я все понимаю. Касаемо размеров, внешнего вида формы и неподписанных кнопок, я руководствуюсь принципом сначала написать какую-то логику, а потом уже в конце делать как надо, переименовывать controlы и т.д. Да и я скинул очень сырую версию, где только начинал проверять, как все работает. Но вообще с точки зрения реальной коммерческой разработки, я так понимаю, там сразу все делается красиво, но такого опыта у меня нет.
0
|
|
|
|
||
| 12.11.2024, 19:36 | ||
|
Оаг, вообще да, принято сперва разработать "модель", т.е. сам фактический алгоритм, а затем на него навешивать "фасад" в виде окна. Такой подход удобен тем, что его можно протестировать любым типом приложения, той же консолью, не имея при этом макета окна как такового.
Но, понятно дело, если опыта нет, то бывает трудно себе представить результат тех или иных действий - на них хочется посмотреть. Поэтому их пытаются сразу куда-то вывести, в то же окно. А здесь возникает вторая проблема: нет разделения логики модели от UI-потока. И результаты становятся непредсказуемыми, ну и в целом программа начинает работать не так как ожидалось. Hello World написал, вывел в окно? 5 + 5 посчитал, результат вывел в TextBox? Все, теперь забывай что делал и начинай делать нормально.
0
|
||
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
| 12.11.2024, 22:16 [ТС] | |
|
Как подключаться до победного, если сервер недоступен? После первого же раза программа останавливается с логичной ошибкой "Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение". Нигде не могу найти пример вызова Connect в цикле или пример обработки этой ошибки.
0
|
|
|
|
|
| 12.11.2024, 22:40 | |
|
Оаг, в моем примере пробовал клиента подключать к серверу, когда тот не работает? Снизу просто появится сообщение типа "такого сервера нет..." или что-то в этом роде, не помню. И никаких ошибок нет.
Так вот вместо этого сообщения можно делать задержку и повторять подключение снова... Клиент будет пробовать подключаться к серваку пока материнская плата не сгорит. Или БП.
1
|
|
|
|
||
| 13.11.2024, 06:22 | ||
|
Следует учесть моменты, что юзер вручную может отключать (можно в тех же параметрах Disconnected добавить флаг) и тогда ни в коем случае не должно попадать на обработку переподключения. Можно без ивентов тупо в момент аварийного дисконекта сразу пинать логику переподключения, но я бы вынес её отдельно по кучи причин. Добавлено через 1 минуту
1
|
||
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
| 15.11.2024, 06:34 [ТС] | |
|
Wolfdp, Понял.
Ну, когда контролов немного, то не запутаюсь. Да и всегда можно двойным кликом тыкать по контролу в конструкторе формы и он перебросит тебя в нужный метод.
0
|
|
|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
| 21.12.2024, 00:48 [ТС] | |
|
wizard41, Здравствуйте, вы говорили, что мой метод получения директории exe-файла программы никуда не годится. А как бы вы его реализовали?
0
|
|
| 21.12.2024, 00:48 | |
|
Описать два потока: первый поток записывает данные в буферную память, а второй поток – считывает Нужны ли эти теги в настоящее время Захват воспроизведения. Недоступно в настоящее время Вчера составила $ 15,12, в настоящее время составляет $ 14,82?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|