![]() 2333 / 1706 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
1 | |
Асинхронные сокеты Windows05.12.2009, 18:06. Просмотров 5672. Ответов 7
Метки нет Все метки)
(
Здравствуйте, форумчане!
Интересует вопрос как можно синхронно отправить сообщение через асинхронный сокет? Нужно отправить сообщение серверу и дождаться ответа. Заранее благодарю за ответы.
0
|
|
05.12.2009, 18:06 | |
Асинхронные сокеты , ф-я WSAAsyncSelect и ее применение C++ Асинхронные сокеты Асинхронные сокеты Асинхронные сокеты или потоки ? |
|
![]() 7175 / 3234 / 77
Регистрация: 17.06.2009
Сообщений: 14,165
|
|
05.12.2009, 21:11 | 2 |
Ну блин и вопрос.
Как обычно - отправил и дальше либо проверять в цикле что ответ пришел или лучше сделать sleep( 1000000 ), выход же будет асинхронный.
1
|
![]() 2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
05.12.2009, 21:18 | 3 |
Отправляй его и дожидайся ответа в отдельной нитке (потоке), который будет только отвечать за сетевой обмен.
1
|
![]() 2333 / 1706 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
06.12.2009, 00:30 [ТС] | 4 |
CheshireCat, вариант с отдельным потоком, к сожалению, не применим - необходимо обойтись одним потоком.
odip, будет ли в таком случае окну (указанному при вызове WSAAsyncSelect), при выходе из функции в которой мы будем ожидать ответ от сервера, послано сообщение о приеме данных (которые мы уже получили после ожидания в цикле или sleep'а) на сокет?
0
|
![]() 2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
06.12.2009, 15:47 | 5 |
Видишь ли, если тебе жестко _необходимо_ обойтись одним потоком, то у тебя есть подводный камень: можешь отправить запрос серверу, а вот ответа - никогда не дождаться.... Например, если сервер успешно принял запрос и подтвердил, а вот ответ - не успел отправить, упал (со стола
![]() Короче, единственный поток мне представляется серьезной архитектурной проблемой. Имхо усилия, затрачиваемые на борьбу с последствиями и проблемами, превосходят усилия, необходимые для изменения архитектуры и "правильной" организации работы приложения. Но это сугубо имхо.
1
|
![]() 2333 / 1706 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
12.12.2009, 16:27 [ТС] | 6 | |||||
Возник новый вопрос.
Есть последовательный UDP сервер использующих асинхронные сокеты Windows. Сервер отправляет сообщения клиентам, клиенты в ответ высылают подтверждение о получении сообщения.
Вопрос в следующем: как серверу игнорировать любые входящие данные (не теряя их) от всех клиентов кроме client? Добавлено через 1 час 18 минут Есть идеи? Добавлено через 7 минут А что если при запросе о соединении, сервер создавал для каждого клиента отдельный сокет? Тогда таких проблем не будет. Что если так?
0
|
![]() 2333 / 1706 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
14.12.2009, 00:59 [ТС] | 7 |
Кто-нибудь может помочь советом?
0
|
6 / 1 / 0
Регистрация: 05.08.2015
Сообщений: 2
|
|
05.08.2015, 10:47 | 8 |
Извиняюсь за некропост, но, возможно, кому-нибудь пригодится. Тебе, похоже надо различать клиентов. Поэтому, когда получаешь ответ от клиента - просто считай его полностью и сохрани. А потом смотри какой клиент тебе прислал ответ. Если тот, от которого ты его ждал - то начинай обработку. Если нет - то просто ничего не делай, жди ответа от другого клиента.
Добавлено через 10 минут получается, тебе надо организовать цикл и в нём вызывать функцию recvfrom
0
|
05.08.2015, 10:47 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. (Winsock) Асинхронные сокеты или что-то подобное Сокеты в Windows Windows сокеты, ошибки в recvfrom Асинхронные сокеты Асинхронные запросы или сокеты? Клиент + Сервер, асинхронные сокеты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |