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

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

05.09.2017, 16:33. Показов 3724. Ответов 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,574
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
14289 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,330
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
14289 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,330
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
14289 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,330
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru