Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2012, 16:38   #1
igorserg
Новичок
Джуниор
 
Регистрация: 06.08.2012
Сообщений: 1
По умолчанию TidTCPClient как определить момент чтения?

Знаю, что не первый задаю этот вопрос, но прошу не ругаться, до конца момента истины так и не дотянул.
В задаче необходимо реализовать SMPP протокол работы с СМС центорм (SMSC). На каждую отправленную команду SMSC присылает результат ее выполнения. Но отправить можно сразу несколько комманд, и в какой момент ловить ответы не понятно. По всякому прочитанному материалу сделал все через таймер:
Код:
procedure TSMPP.PDUGet(Sender: TObject);
begin
  timPDUGet.Enabled:= false;

  if TCPClient.IOHandler.Readable(5) then begin
    PDU_Resp_Command_Length:= TCPClient.IOHandler.ReadLongInt;
    PDU_Resp_Command_id:= TCPClient.IOHandler.ReadLongInt;
    PDU_Resp_Command_Status:= TCPClient.IOHandler.ReadLongInt;
    PDU_Resp_Sequence_Number:= TCPClient.IOHandler.ReadLongInt;
    PDU_Resp_Command:= Get_PDU_Command(PDU_Resp_Command_id);
    ...
  end;
  timPDUGet.Enabled:= true;
end;
но почему-то возникают ситуации (например чуть больше поставил задержку таймера), когда к моменту чтения буфер пуст, т.е. условие TCPClient.IOHandler.Readable(5) пройдено а на ReadLongInt возникает ошибка.
Пытался загрузить буфер в поток с параметрами по умолчанию (ReadStream(mem)). Но почему-то не определяется размер буфера... т.е. работает только если явно укажешь размер, а я не знаю какую команду пришлет сервер.

Как правильно и самое главное вовремя оформить чтение ответа сервера?
igorserg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм программного чтения кода(наподобие чтения тегов в браузерах) psih_stalker Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 10.01.2012 21:32
Вопрос по TidTCPClient hobtorkins Работа с сетью в Delphi 0 21.12.2011 13:25
Как отправить текст с TidTCPServer на TidTCPClient? cyberexpert Работа с сетью в Delphi 0 19.09.2011 23:26
Как корректно определить границы кучи в любой момент времени без использования функций менеджера дрп в си DartLenin Общие вопросы C/C++ 0 18.12.2010 21:15
Как определить момент запуска сторонней программы? NioTo Win Api 2 17.12.2007 16:40