|
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
|
||||||
Ip::udp::socket.async_receive_from. Как передать дополнительные аргументы в callback14.10.2014, 00:19. Показов 6837. Ответов 32
Метки нет (Все метки)
Прив. Есть такой код
В общем, суть в том, что мне очень нужно передать в метод receive_callback свои данные. В C#, с его асинхронными методами BeginИмяМетода это все можно было легко сделать, передав нужный параметр, и получив его в методе callback'e. Но как это сделать в C++?
0
|
||||||
| 14.10.2014, 00:19 | |
|
Ответы с готовыми решениями:
32
При boost::scoped_ptr<udp::socket> reset вылетает 0xC0000005 Boost::asio::ip::udp::socket bind а мне нужен не локальный хост |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 15.10.2014, 17:27 | |
|
lawliet93, А это уже вам решать каким он должен быть. Но то, что он должен быть это факт. Порты можно выбирать рандомно, явно указывать при запуске программы / в конфиге или как-то еще, это уже не суть важно.
0
|
|
|
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
|
|
| 15.10.2014, 17:29 [ТС] | |
|
ForEveR, да все важно.
Если я буду заранее определять порт, то не смогу запустить два клиента на одном компе. А если рандомно, то как сервер должен узнать - на какой порт отправлять? эт разве что только клиент должен отправлять данные о своем порте серверу.
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
| 15.10.2014, 17:40 | |||||||||||
|
lawliet93, Эм. Вы не заметили, что async_receive_from принимает endpoint по ссылке? Он сохраняет в переданной ссылке endpoint с которого пришел клиент.
Можно так же работать без bind - приложение будет открыто на рандомном порте. Примеры
Сервер
Добавлено через 2 минуты При запуске сервера, затем клиента. Со стороны сервера: got: hello Со стороны клиента: sended 5 bytes with Success received 5 bytes with Success hello Добавлено через 1 минуту Я вас наверное запутал сначала, когда начал отвечать. Давно не связывался с boost::asio::udp. Освежил память - теперь говорю как есть.
1
|
|||||||||||
|
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
|
||||||
| 15.10.2014, 21:07 [ТС] | ||||||
|
ForEveR, вот добавил я строку
0
|
||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.10.2014, 08:46 | |
|
lawliet93, Весь код в студию.
0
|
|
|
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
|
||||||
| 16.10.2014, 09:29 [ТС] | ||||||
|
ForEveR, не верете мне?? не верете??????
0
|
||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.10.2014, 10:29 | |
|
lawliet93, receive handler не должен вызываться просто так. Значит откуда-то прилетает запрос на клиент.
0
|
|
|
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
|
|
| 16.10.2014, 11:59 [ТС] | |
|
ForEveR, очень странно, первые 0 байт приходят от порта 9050, хотя сервер не работает. А второе от порта 0. Первое сообщение приходит с кодом ошибки 10022, а второе с 10054.
Порт менял пару раз, каждый раз эта же проблема.
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.10.2014, 12:05 | |
|
lawliet93, У меня не удается это воспроизвести. Скиньте так же код сервера. Включите сервер, включите клиент. Попосылайте запросы с клиента на сервер. Скиньте вывод клиента/сервера. Так же выводите ошибки через e.message() и никак иначе.
П.С. проверьте какая установлена кодировка, очень странно, что ошибки выводятся неверно.
0
|
|
|
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
|
|||||||||||
| 16.10.2014, 12:53 [ТС] | |||||||||||
|
ForEveR, код сервера (вообще я его не переделывал почти, вроде)
0
|
|||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.10.2014, 14:42 | |
|
lawliet93, Не знаю в чем проблема. У меня не удается это воспроизвести. Можете проверять ec на то, что он успешен и только тогда обрабатывать запрос.
Мой вывод с вашим кодом. Клиент: sended 6 bytes with Success sended 6 bytes with Success sended 6 bytes with Success Сервер: We got 6 bytes from port: 44549 hello1 Add new client We have 1 clients now We got 6 bytes from port: 44549 hello2 We got 6 bytes from port: 44549 hello3
0
|
|
|
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
|
|
| 16.10.2014, 15:23 [ТС] | |
|
ForEveR, у меня есть один просьба к вам. Запустите сервак, потом клиент. Потом закройте клиент и запустите еще раз.
У меня при этом на сервере творится какая-то белеберда. И еще, какая у вас ОС?
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||||||||||||||||||||||
| 17.10.2014, 13:50 | ||||||||||||||||||||||||||
|
lawliet93, Ubuntu 14.04.
После исправления на клиенте
Клиент:
lawliet93, Кстати, с моей точки зрения, намного веселее использовать сопрограммы. Вот как выглядят простые сервер/клиент на сопрограммах. Все выполняется асинхронно. Примеры
1
|
||||||||||||||||||||||||||
| 17.10.2014, 13:50 | |
|
Как передать callback функцию? Как в Qt передать указатель на CallBack функцию WinAPI ? :-) WCF Callback for UDP addEventListener - дополнительные аргументы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|