Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Асинхронная многонаправленная связь сервер-клиент через один и тот же открытый сокет?
У меня есть клиент-серверное приложение, где клиент находится на устройстве Windows Mobile 6, написанном на C++ , а сервер находится на полном Windows и написан на C#.
Первоначально он был нужен мне только для отправки сообщений от клиента на сервер, причем сервер только когда-либо отправлял подтверждение того, что он получил сообщение. Теперь я хотел бы обновить его, чтобы сервер мог фактически отправить сообщение клиенту для запроса данных. Поскольку в настоящее время он настроен так, что клиент находится только в режиме приема после отправки данных на сервер, это не позволяет серверу отправлять запрос в любое время. Мне придется ждать клиентских данных. Моей первой мыслью было бы создать еще один поток на клиенте с отдельным открытым сокетом, прослушивая сервер requests...just, как сервер уже имеет в отношении клиента. Есть ли способ, в пределах одного потока и с использованием одного сокета, для всех серверов отправлять запросы в любое время?
Можете ли вы использовать что-то для эффекта WaitForMultipleObjects() и передать ему буфер приема и событие, которое сообщает ему, что есть данные для отправки?
Когда мне нужно было написать приложение с клиент-серверной моделью, где клиенты могли бы выходить и входить в любое время (я предполагаю, что это также относится к вашему приложению, поскольку вы используете мобильные устройства), я убедился, что клиенты отправляют онлайн-сообщение на сервер, указывая, что они подключены и готовы делать все, что им нужно.
в это время сервер мог отправлять сообщения обратно клиенту через то же самое открытое соединение.
Кроме того, но я не знаю, применимо ли это к вам, у меня было какое-то сердцебиение , которое клиенты посылали на сервер, давая ему знать, что он все еще в сети. Таким образом, сервер знает, когда клиент был принудительно отключен от сети, и он может пометить этот клиент обратно как автономный.
Использование асинхронной связи полностью возможно в одном потоке!
Существует распространенный шаблон проектирования в разработке сетевого программного обеспечения, называемый шаблоном реактора (посмотрите на эту книгу ). Некоторые известные сетевые библиотеки предоставляют реализацию этого шаблона ( Посмотрите на ACE).
Короче говоря, реактор-это объект, вы регистрируете все свои гнезда внутри и чего-то ждете. Если что-то произошло (поступили новые данные, соединение закрыто...) реактор сообщит вам об этом. И конечно, вы можете использовать только один сокет для асинхронной отправки и приема данных.
Я не совсем понимаю, хотите ли вы добавить асинхронные биты к серверу в C# или клиенту в C++.
Если вы говорите об этом в C++, платформы desktop Windows могут выполнять ввод-вывод сокетов асинхронно через API, которые используют перекрывающиеся I/O. для сокетов, WSASend, WSARecv оба разрешают асинхронный ввод-вывод (прочитайте документацию по их параметрам LPOVERLAPPED, которые можно заполнить событиями, которые будут установлены после завершения ввода-вывода).
Я не знаю, поддерживают ли мобильные платформы Windows эти функции, поэтому вам, возможно, придется сделать некоторые дополнительные раскопки.
Посмотри на асио . Это крест библиотеки совместимы c++ для asyncronous IO. Я не уверен, что это было бы полезно для сервера (я никогда не пытался связать стандартный c++ DLL с проектом c#), но для клиента это было бы полезно.
Мы используем его с нашим приложением, и это решило большинство наших проблем параллелизма IO.