kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Adam Haile
Adam Haile
Вопрос

Асинхронное многонаправленное взаимодействие сервера и клиента через один и тот же открытый сокет?

У меня есть клиент-серверное приложение, где клиент находится на устройстве Windows Mobile 6, написанном на C++, а сервер находится на полной Windows и написан на C#.

Изначально мне нужно было, чтобы оно только отправляло сообщения от клиента к серверу, а сервер лишь отправлял обратно подтверждение того, что он получил сообщение. Теперь я хотел бы обновить его так, чтобы сервер мог действительно отправлять сообщение клиенту для запроса данных. Поскольку в настоящее время я настроил его так, что клиент находится в режиме приема только после того, как отправит данные на сервер, это не позволяет серверу отправить запрос в любое время. Мне пришлось бы ждать данных от клиента. Моей первой мыслью было бы создать еще один поток на клиенте с отдельным открытым сокетом, прослушивающим запросы сервера... точно так же, как сервер уже имеет связь с клиентом. Есть ли способ, в рамках одного потока и используя один и тот же сокет, сделать так, чтобы сервер мог отправлять запросы в любое время?

Можете ли вы использовать что-то вроде WaitForMultipleObjects() и передать ему буфер приема и событие, которое сообщит ему, что есть данные для отправки?

23 2008-08-04T13:52:25+00:00 4
Ijas Ameenudeen
Ijas Ameenudeen
Редактировал вопрос 20-го января 2019 в 1:44
Программирование
c#
c++
sockets
Решение / Ответ
 sven
sven
4-го августа 2008 в 2:30
2008-08-04T14:30:12+00:00
Дополнительно
Источник
Редактировать
#8407383

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

В это время сервер мог отправлять сообщения обратно клиенту через то же самое открытое соединение.

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

8
0
Steve Gury
Steve Gury
17-го августа 2008 в 1:53
2008-08-17T13:53:04+00:00
Дополнительно
Источник
Редактировать
#8407386

Используя асинхронную коммуникацию полностью возможно в единственной нити!

Есть образец общего умысла в развитии сетевого программного обеспечения, названном реакторным образцом ([смотрят на эту книгу] [1]). Некоторая известная сетевая библиотека обеспечивает внедрение этого образца ([взгляд на ТУЗ] [2]).

Кратко, реактор - объект, Вы регистрируете все свои гнезда внутри, и Вы ждете чего-то. Если что-то произошло (новые данные прибыли, связь близко...), реактор уведомит Вас. И конечно, Вы можете использовать только одно гнездо, чтобы послать и полученные данные асинхронно.

[1]: http://www.amazon.fr/Pattern-Oriented-Software-Architecture-Concurrent-Networked/dp/0471606952/ref=sr_1_9? ie=UTF8& s=english-books& qid=1218980593& sr=1-9 [2]: http://www.cs.wustl.edu / ~ schmidt/ACE.html

7
0
 fastcall
fastcall
5-го августа 2008 в 5:30
2008-08-05T05:30:41+00:00
Дополнительно
Источник
Редактировать
#8407384

Я не совсем понимаю, хотите ли вы добавить асинхронные биты к серверу на C# или к клиенту на C++.

Если вы говорите о том, чтобы сделать это на C++, то настольные платформы Windows могут выполнять асинхронный ввод/вывод сокетов через API, которые используют перекрытый ввод/вывод. Для сокетов, WSASend, WSARecv оба позволяют асинхронный ввод/вывод (читайте документацию по их параметрам LPOVERLAPPED, которые вы можете заполнить событиями, которые будут установлены, когда ввод/вывод завершится).

Я не знаю, поддерживают ли платформы Windows Mobile эти функции, так что вам, возможно, придется покопаться еще немного.

3
0
 roo
roo
11-го августа 2008 в 10:00
2008-08-11T10:00:06+00:00
Дополнительно
Источник
Редактировать
#8407385

Посмотрите asio. Это кросс-совместимая библиотека c++ для асинхронного ввода-вывода. Я не уверен, будет ли это полезно для сервера (я никогда не пытался связать стандартную c++ DLL с c# проектом), но для клиента это было бы полезно.

Мы используем ее в нашем приложении, и это решило большинство наших проблем с параллелизмом ввода-вывода.

3
0
Похожие сообщества 15
pro.cxx
pro.cxx
5 960 пользователей
C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. No Ads, offtop, flood 2. Полные правила тут https://t.me/ProCxx/259155 Объявления о вакансиях,эвентах - в лс @AlexFails или @MasterZiV
Открыть telegram
supapro.cxx
supapro.cxx
4 991 пользователей
Чат для тех, кто немного знает C++, простые вопросы по C++, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат-флудилка — @fludpac /прогерские вопросы – @pro_prog 🚫flood, pron, spam; ✅УВАЖАЙТЕ ДРУГ ДРУГА!
Открыть telegram
Microsoft Stack Jobs
Microsoft Stack Jobs
2 414 пользователей
Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks
Открыть telegram
С#
С#
2 330 пользователей
Стараемся не флудить. Пишем по делу. Правила: https://t.me/professorweb/430450 Для флуда @svoboda_obsh
Открыть telegram
CODE BLOG / C#
CODE BLOG / C#
1 763 пользователей
Чат для .NET разработчиков и C# программистов. По всем вопросам: @shwanoff Youtube-канал: https://youtube.com/codeblog Основной канал: @codeblog Вконтакте: https://vk.com/codeblog Правила: https://t.me/codeblog_csharp/246972 Вакансии по тегу #work
Открыть telegram
var chat = new Chat();
var chat = new Chat();
1 428 пользователей
Обсуждение вопросов по .NET Правила чата – https://blog.devdigest.today/chat-rules Чат для флуда – https://t.me/+zwxI91RGG6s2YzAy
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 3 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией