|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.01.2010, 14:11 | #1 |
Форумчанин
Регистрация: 05.06.2007
Сообщений: 529
|
recv()
Здравствуйте. Проверяю на входящие данные путем
int n = recv(sock1,a,1000,0); все работает, но вот данные могут придти дважды за время открытого сокета, собственно мне нужно еще раз проверить ... n = recv(...); if(n == 0){cout<<"done";} собственно если 0, то все ок, можно закрывать сокет... но вот проблема, если данные один раз приходят, то во время вызова функции второй раз, программа ждет, пока придут данные, и не возвращает 0... собственно как проверить, что данных просто нет, без ожидания? |
13.01.2010, 15:44 | #2 |
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
перед посылкой данных отправить приложению информацию о том, какой размер сейчас следует принять
подпись
|
13.01.2010, 17:22 | #3 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Артэс
20-ый пост. http://programmersforum.ru/showthrea...t=57003&page=2 опять начинаешь мозги выносить?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
13.01.2010, 18:46 | #4 |
Форумчанин
Регистрация: 05.06.2007
Сообщений: 529
|
Я про то, что так и задумано, что бы recv(); ставил программу на паузу?
открывается сокет, ожидается входящее соединение, сразу же следует recv(); и получаем входящие данные ... все ок, но сокет не закрываем, т.к нужно принять следующие данные, которые придут чуть позже, даже хоть через минуту... вот тут и вопрос, как мне собственно узнать, что пришли эти новые данные, не ставя программу на паузу ожидания, что и получается с recv();? я думал recv(); проверит, и если новых данных нет, то вернет 0... посему и сделал цикл, где вызывается эта функция, после чего выполняется остальной код... и затем весь цикл повторяется вновь... таким образом пытаюсь отследить, пришли новые данные или нет, и выполнить соответствующее действие... но получается, что функция на паузу ставит программу... |
13.01.2010, 18:51 | #5 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
можете использовать Overlapped для ReadFile(второй винсок позволяет) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
14.01.2010, 07:41 | #6 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Цитата:
|
|
15.01.2010, 14:27 | #7 |
Форумчанин
Регистрация: 05.06.2007
Сообщений: 529
|
во во, а можно подробнее об асинхронных сокетах?
А в случае разделения на потоки, поидее одному клиенту = один поток? Ведь соединения с клиентами не закрываются сразу, и могут часами работать |
15.01.2010, 14:51 | #8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
[QUOTE=Артэс;438504]во во, а можно подробнее об асинхронных сокетах?
Яндекс с гуглом о них расскажут подробнее и с примерами Ну это самый простой вариант. При желании можно 1 поток на 100 клиентов замутить. Зависит от числа подключений, а то запускать пару тысяч потоков - не айс. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
WinSock (send, recv) | AidarBik | Работа с сетью в Delphi | 1 | 27.07.2008 15:22 |