Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
.NET 4.x

Асинхронное клиент серверное приложение

05.09.2017, 16:33. Показов 3679. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, а так же спасибо всем кто загляну и не прошёл мимо.
Сразу предупреждаю, вопросов от меня будет много, но все они будут по порядку и по мере продвижения проекта. Слать меня в гугль, «курить» маны, в соседние ветки не нужно (разве что только в перуанскую деревню если что %) )
Всё что можно было нагуглено – прочитано, но остались сомнения или недопонимания чего то, поэтому вопросы и будут идти по порядку возникновения проблем, кроме того что то придётся мне изучать на лету.
Почему обращаюсь к вам: 1) Ранее никогда не писал асинхронные клиент-серверные приложения на шарпе в общем то и на других языках ибо как бы не было нужды, поэтому острая нужда в направлении меня в нужную сторону, примеры и т.д. (а может уже кто то поделится уже реализованными вещами) 2) меня заставили, так уж сложились звёзды %))
Вопрос: Подскажите, пожалуйста, какую реализацию сервера лучше (оптимально) всего взять в качестве каркаса для будущего приложения.
Рассматривается
1) https://docs.microsoft.com/en-... et-example
2) https://msdn.microsoft.com/ru-... 35942.aspx (Листинг 4. Асинхронный сервер)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2017, 16:33
Ответы с готовыми решениями:

Клиент-Серверное приложение, асинхронное программирование
Здравствуйте, это мой первый опыт в написании приложений такого плана, но я прочитал уже довольно много литературы, а вот ответа на...

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что сервер(клиент) не отвечает в течении...

Клиент-серверное приложение
Заинтересовался написанием клиент-серверных приложений, с чего начать? что написать? есть ли какая-либо литература (желательно электронная)...

20
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.09.2017, 17:10
Цитата Сообщение от Coroners Посмотреть сообщение
вопросов от меня будет много
У меня пока всего один. Что ваше приложение должно будет делать (примерный функционал, вкратце, в общих чертах)?
Это повлияет на то, как его удобнее будет реализовывать.
0
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
05.09.2017, 17:35  [ТС]
Задача, которую следует решить: Имеется стороннее ПО (нет у него ни апи, ни сетевых функций и прочих вкусностей) стоящее в сегменте ТКСПД (телекоммуникационная корпоративная сеть передачи данных) которое юзает в качестве БД SQLite, необходимо создать свой сервер (который может быть ещё и подчинённым) который будет творить свои «тёмные» вещи с этим сторонним ПО (работать с его гуи по команде и лесть в его БД) и отдавать труды своего творения на клиенты (примерное кол-во будет 2-3к). Всё что касается трудов сервера в отношении стороннего ПО вопросов у меня не вызывает, а вот вопросов о передачи «трудов» у меня много. При этом всём нагромождении юзать WCF нельзя многое бы решил через него, написано должно быть на нет 4.0 с использованием асинхронного сервера и клиентов. По факту как выглядит в глазах заставивших меня - посылается команда на сервер он отрабатывает действие лезит с гуи стороннего по забирает из него что надо и отдаёт это клиенту запросившему инфу, скажем на ПО произошло событие сервак должен взять его и разослать всем подключенным клиентам + ещё они хотят через это сервер ещё обмениваться сообщениями + кое что будет передаваться из SQLite. Ну в общем как то так
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.09.2017, 17:44
Цитата Сообщение от Coroners Посмотреть сообщение
юзать WCF нельзя многое бы решил через него, написано должно быть на нет 4.0
WCF работает, насколько я помню, с .NET 2.0, так что если проблема только в этом-она ей не является.
0
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
05.09.2017, 18:01  [ТС]
Проблемы по факту:
1) во мне так как ранее не работал с асинхронными клиентами и серверами - но это восполнится быстро, хотелось бы изначально выбрать правильный каркас с которого начать и двигаться, а не перепиливать потом. Поэтому пересмотрел все варианты (во многих что то понятно а что то нет) приглянулись 2 указанных из них решил выбрать но открыт и для других предложений в примере от майкрософта напрягло
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try {  
            listener.Bind(localEndPoint);  
            listener.Listen(100);  
 
            while (true) {  
                // Set the event to nonsignaled state.  
                allDone.Reset();  
 
                // Start an asynchronous socket to listen for connections.  
                Console.WriteLine("Waiting for a connection...");  
                listener.BeginAccept(   
                    new AsyncCallback(AcceptCallback),  
                    listener );  
 
                // Wait until a connection is made before continuing.  
                allDone.WaitOne();  
            }
в отличии от второго там нет ни каких циклов и обязательного <EOF> но второй мне менее понятен
2) Проблема в моём начальстве которое не шарят в программировании но зато умеет придумывать всякие вкусности прикрываясь словами "в тренде", "инновации" и т.д.
3) В ОЗИ (отделе защиты информации) которые запретили юзать WCF, сервак и клиент должен быть написан полностью от и до без использования сторонних библиотек с использованием асинхронных сокетов и т.д. и тп. + не облегчает жизнь то что всё это ещё под надзором VipNet координатора в общем все сложно

PS: сразу предвкушавшая вопрос где я работаю - ПФР в мухосранске в должности автоматизатора, а так как я единственный который хоть что то пишет пнули в меня
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
05.09.2017, 18:11
Цитата Сообщение от Coroners Посмотреть сообщение
сервак и клиент должен быть написан полностью от и до без использования сторонних библиотек с использованием асинхронных сокетов и т.д. и тп.
WCF уже сторонними библиотеками стало? Тогда уж и System.Net.Sockets со всеми классами туда же, и вообще весь .NET Framework...
2
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
05.09.2017, 18:22  [ТС]
Я сказал что нельзя пользоваться сторонними библиотеками которые уже реализуют создание сокетов для клиента или сервера, а так же любые другие сторонние библиотеки не входящие в состав .Net 4.0 ну короче если кто то чёто написал и засунул в длл юзать уже нельзя с точки зрения начальства сервак и клиент должен вообще выглядеть в виде одного экзе файла + ини файл настроек и всё, поэтому приходится сочинять собственное говно для работы с файлами экзеля на прямую а не юзать какую нить вкусность аля NPIO. что касается WCF то его тупо нельзя юзать и всё хоть убейся - правила игры сочиняю не я сказали не юзать ни чего из WCF и всё на этом разговор закончен.
В общем пока не получил ответа какую конструкцию лучше юзать 1 или 2 а вопрос пока стоит в этом что лучше взять в качестве каркаса 1 вариант или 2 ну или вообще посмотреть в какую то другую сторону.
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
05.09.2017, 19:02
Coroners, WCF тупо удобнее, чем ручная низкоуровневая работа через TCP, так что рекомендую его (конечно, если не идёт речи о выдумывании своего протокола, или работе с существующим).

Не по теме:


А вот придумывать про один EXE + ini не надо. Всем плевать сколько файлов будет в папке приложения. :)

1
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
05.09.2017, 19:23  [ТС]
Usaga спасибо конечно за пост но как я уже сказал WCF юзать НИ КАК от слова СОВСЕМ и это уже не обсуждается ни под каким соусом ОЗИ сказали нет значит нет и на их мнение я повлиять не могу и тараканов со стразиками травить в их головах тоже. Так же вам да и наверное мне да и конечному пользаку тоже плевать сколько будет файлов и каких в папке приложения но начальство моё не согласно их видение тупо 1 экзешник + 1 инишник так оно видит, так оно хочет, так оно секурно, безгеморно и т.д. - это их требования а не мои, поэтому я сижу и выдумываю как бы всё это замутить, собственно за этим я сюда и пришёл и пока с единственным вопросом что лучше взять из указанного в первом моём посте, какой сервак из примеров сможет держать больше клиентов, быстрее отрабатывает, стабильнее, не будет разрывать соединение после того как принял данные, не будет рвать соединение по таймауту и т.д. если при дальнейшей реализации будут возникать вопросы я их пошагово и задам, а пока мы остановились на 0 шаге что выбрать в виде каркаса....
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.09.2017, 19:44
Цитата Сообщение от Coroners Посмотреть сообщение
пока не получил ответа какую конструкцию лучше юзать 1 или 2
А там нет разницы, в обоих случаях используются сокеты, так что без разницы что вы возьмете.
0
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
05.09.2017, 20:03  [ТС]
insite2012 огромное спасибо, но меня настораживает в первом примере использование бесконечного цикла
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try {  
            listener.Bind(localEndPoint);  
            listener.Listen(100);  
 
            while (true) {  
                // Set the event to nonsignaled state.  
                allDone.Reset();  
 
                // Start an asynchronous socket to listen for connections.  
                Console.WriteLine("Waiting for a connection...");  
                listener.BeginAccept(   
                    new AsyncCallback(AcceptCallback),  
                    listener );  
 
                // Wait until a connection is made before continuing.  
                allDone.WaitOne();  
            }
которого нет во втором, но во втором примере мне непонятно вот эта конструкция используемая при старте сервера
C#
1
2
3
4
SetupServerSocket();
        for (int i = 0; i < 10; i++)
            _serverSocket.BeginAccept(new
                AsyncCallback(AcceptCallback), _serverSocket);
PS: при этом второй пример я попробовал на скорую руку к нему написал простенький клиент (всё засунуто в WinForm), коннект есть, передача данных тоже, однако не понял как остановить данный сервак %)))) в общем то можно остановится и на нём тогда коль говорите что без разницы но тогда вопрос с тем как остановить сервер останется открытым
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.09.2017, 20:14
Лучший ответ Сообщение было отмечено Coroners как решение

Решение

Цитата Сообщение от Coroners Посмотреть сообщение
меня настораживает в первом примере использование бесконечного цикла
Смотрите внимательнее, там используются сигнализирующие конструкции (а-ля ManualResetEvent/AutoResetEvent), чтобы цикл останавливался в нужное время. Но он, естественно, так или иначе будет (и должен) работать постоянно, иначе как ему принимать соединения от новых клиентов. Такой там пример.
Цитата Сообщение от Coroners Посмотреть сообщение
во втором примере мне непонятно вот эта конструкция используемая при старте сервера
Цикл, десять попыток асинхронного соединения, вроде все понятно.
Цитата Сообщение от Coroners Посмотреть сообщение
вопрос с тем как остановить сервер останется открытым
Передать ему сигнал, что пора ему бай-бай уже, конечно же.
1
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
05.09.2017, 20:24  [ТС]
уже 2 ночи и может туплю но означает ли это что всего только 10 клиентов сможет подключится к серверу или это одновременно 10 а пока не умрёт пул ?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.09.2017, 20:47
Цитата Сообщение от Coroners Посмотреть сообщение
означает ли это что всего только 10 клиентов сможет подключится к серверу
Исходя из того кода да, к каждому экземпляру класса AsynchronousIoServer ожидается подключение до 10 клиентов. После этого цикл завершится.
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
06.09.2017, 03:12
Coroners, я понимаю, что это ни на что не повлияет, но я просто обязан заметить три вещи относящиеся к WCF (можете передать их в отдел ОЗИ):
1) WCF является частью .NET Framework, лежит в GAC (соответственно, имеет строгое имя и подпись);
2) WCF умеет в шифрование и сжатие трафика, TCP - нет, так что кто тут секьюрнее очевидно невооружённым глазом;
3) Ваш отдельностоящий EXE один чёрт будет использовать сборки (DLL-ки) .NET Framework-а, так что, если ОЗИ боится подмены сборки WCF-а, то ему нужно и бояться подмены сборки System.Net.Socket, в которой лежат классы для работы с TCP;

Так что смысла неиспользовать WCF нет. Чисто с технической точки зрения он - такая же часть .NET как и простые сокеты. Но имеет куда больше возможнойстей, в том числе и шифрование трафика, проброс исключений, прозрачная для пользователя сериализация. Но, видимо, ОЗИ виднее, кто я такой, что бы оспаривать
3
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
06.09.2017, 05:39  [ТС]
Usaga с вашими доводами я полностью согласен и всё сказанное вами тоже прозвучало из моих уст и да мне легче было бы использовать WCF а не изобретать новые велосипеды обтачивая их напильником, при этом реализация безумного плана моего начальства мной в одну каску было бы быстрее и т.д. но к сожалению я тоже особо ни кто в ОЗИ и тут как в армии сказали капать - какаю, сказали не копать ни капаю, а всё остальное от лукавого - такова политика партии (вообще хочу уйти из этой конторы нафиг но к сожалению некуда - напряженка с рабочими местами из за мухосранска). Не знаю чего там ОЗИ боится а может оно им технически не алё я не знаю по крайне мере внятных и вразумительных ответов я от них не получил. На всю секурность и шифрование ответ один мы под управлением випнет координаторов и випнет мониторов которые по факту (а так оно и есть) шифруют любой входящий и исходящий трафик, юзают виртуальние ипы и т.д. так что шифрование, сжатие трафика для них не аргумент ни разу. Как я вообще понял вся эта затея из разряда "хочух", на серваке соит моя тулза которая делает всё чё надо но вот им "прихотелось" чтобы оно ещё слало данные в толстые клиенты.... в общем борюсь и пытаюсь донести до их умов ... но пока безрезультатно
1
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
06.09.2017, 05:53
Coroners, ну, тогда выбора у вас нет (или есть - использовать WCF и никому об этом не сказать, я так понял, что всё равно никто не шарит, чтобы это проверить).

Какая из реализаций лучше для вас подойдёт сказать сложно. От вашей задачи зависит. Я бы рассматривал вариант с работой с сетью полностью в отдельном потоке. Так было бы больше места для манёвра. Если общения с сетью мало и оно простое, то можно и асинхронный вариант рассмотреть, но лично мне он не особо нравиться. Запустил отдельный поток - и всё. Если данные придут - дёрнется event. Надо отправить что-то - положи в очередь на отправку. Всё просто.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.09.2017, 20:10
Цитата Сообщение от Usaga Посмотреть сообщение
использовать WCF и никому об этом не сказать, я так понял, что всё равно никто не шарит, чтобы это проверить
Поддерживаю. Написать на WCF и сказать что на сокетах (и это будет даже правдой, внутри они так или иначе используются ), а потом пройтись по программе обфускатором+протектор, и тогда там сам черт не разберет, на чем там реально написано.
0
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
07.09.2017, 13:54  [ТС]
в общем 2 дня боёв с боевыми садамитами из ОЗИ и прочего начальства результата не принесли.... развернул их же метадами в лоб используя их же бумажки, сказал чтобы они разрабатывали протокол который будет поверх TCP коль они такие секурные, чтоб утвердили этот протокол и внесли его в список ФАП, предоставили мне список библиотек среды .Net которые я могу юзать и подключать в using а так же все классы, методы и т.д. находящиеся в них, чтобы они потом могли позырить чё я накодил и ненафигачил ли им левого, которое могу заюзать в своих коварных целях - всё оформил официальной бумажкой.....
Надо было видеть как зашевелился этот муравейник "хочух".... ждёмс результата
2
07.09.2017, 15:10

Не по теме:

Coroners, ну ни фига себе... Это ж надо так не хотеть делать тупую работу! Похвально!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.09.2017, 15:10
Помогаю со студенческими работами здесь

клиент-серверное приложение
собственно проблема заключается в том, что при запуске клиента, и нажатии на кнопку (отправление сообщения серверу) клиент...

Клиент-серверное приложение
Клиент-серверное приложение между процессов с помощью именованых каналов Здравствуйте. Тут ахтунг, короч. Не то, чтобы я гуру в этом...

Закрывается клиент-серверное приложение
Здравствуйте, делаю что то типа клиен-сервера. Использую сокеты. При подключении с клиента на сервер (Виндовс Формс). Он иногда закрывается...

Как написать клиент-серверное приложение
Как сделать так чтоб программа обменивалась данными с другой програмой через глобальную сеть. Программы установлены на 2 компах с...

Клиент-серверное приложение по Интернету с динамическим IP
Доброго времени суток! Имеются следующие клиент и сервер, которые я пытаюсь &quot;подружить&quot; через Интернет: Клиент. namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru