|
0 / 0 / 0
Регистрация: 28.02.2020
Сообщений: 103
|
|
Поток в настоящее время используется предыдущей версией потока27.10.2024, 00:31. Показов 4878. Ответов 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 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,580
|
||
| 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?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|