Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Неблокирующие сокеты


Автор: reCoder 6.11.2006, 20:18
Здраствуйте.
У меня появилась следующая проблема:

Пишу на C++ под Visual Studio .NET, используя обычные сокеты.
Но появилась необходимость реализовать заместь блокирующих - неблокирующие сокеты.

Обьясните пожалуйста в чем разница в реализации таких приложений ?
Что и как заменить ?

Автор: Romikgy 6.11.2006, 21:03
http://vmk.ugatu.ac.ru/sockwin.htm
http://hellknights.void.ru/articles/0x48k-winsockets.html
а вообще разница в том , что на всякое событие , генерится мессага

Автор: reCoder 6.11.2006, 21:16
Спасибо.
Хочу рассказать суть проблемы, которая свела мою работу на ноль, сижу в ужасном состоянии.

И так. Я получаю ответ от сервера.

while (true)
{
   int iLen = recv(Socket, .... ); 
   if (iLen <= 0) break;
}

Получаю я например 20 символов. Общий размер данных, которые я хочу получить - 24. 
Получив первые 20, выполняется следующий шаг цикла, в котором получаю 4 байта.
Т.к. число 4 не подходит под условие завершения цикла, выполняется переход в к следующему шагу.

И вот сдесь проблема. Сокеты использую блокирующие, уже нет данных которые нужно получать, и программа "виснет" в ожидании ответа сервера.

Что делать ? Не хочу использовать асинхронные/неблокирующие сокеты, т.к. уже значительная часть программы написана и прекрасно работает.

Что делать ?

 smile  

Автор: Romikgy 6.11.2006, 21:46
передай сначало размер пакета, а потом сам пакет

Автор: reCoder 6.11.2006, 21:53
Тоесть ? Можно пример ?
Или поясните подробней пожалуйста !

Автор: Romikgy 6.11.2006, 22:49
а какой здесь пример те нужен, все делаешь как и раньше, но перед передачей символов, передай число  , еол_во символов в буфере,
а на приемной стороне принимаешь это число , и после этого создаешь приемный буфер , и в него принимаешь необходимое число байт,
что не понятно ?

Автор: reCoder 6.11.2006, 22:54
Я пишу FTP клиент, а не сервер и клиент.
Так что возможности этот процесс контролировать - нету.

Автор: Romikgy 6.11.2006, 23:05
имхо в фтп клиент имеет возможность спросить у сервера размер файла

Автор: reCoder 6.11.2006, 23:10
Причем сдесь размер файла ?
Я даже не могу получить нормально приветственное сообщение !

Понимаете, я не могу получить нормально и в полном обьеме ответ сервера !

Неужели тяжело пример рабочий показать, или указать правельное направление !?

Автор: Romikgy 7.11.2006, 10:08
http://sources.ru/cpp/cpp_network.shtml#2

Цитата(reCoder @  6.11.2006,  22:10 Найти цитируемый пост)
указать правельное направление

А я тебе что направление не давал?! Как ты описал свою проблему такие ответы я и давал!
Если бы ты в первом посте описал что ты делаешь , и что не получается , то и получил бы правильный ответ гараздо раньше!

PS как говорили древние мудрецы, правильно поставленый вопрос , это 50 % ответа!!!!

Автор: reCoder 7.11.2006, 14:28
спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)