Я знаю, я задаю много вопросов ... но, как новый разработчик Delphi, я продолжаю задумываться над всеми этими вопросами:)
В данном случае речь идет о связи TCP с использованием indy 10. Чтобы сделать связь эффективной, я кодирую запрос операции клиента в виде одного байта (в большинстве сценариев, конечно, за ним следуют другие байты данных, но в этом случае только один единственный байт). Проблема в том, что
var Bytes : TBytes;
...
SetLength (Bytes, 1);
Bytes [0] := OpCode;
FConnection.IOHandler.Write (Bytes, 1);
ErrorCode := Connection.IOHandler.ReadByte;
не отправляет этот байт немедленно (по крайней мере, серверный обработчик выполнения не вызывается). Например, если я изменю «1» на «9», все будет нормально. Я предположил, что Indy буферизует исходящие байты и попытался отключить буферизацию записи с помощью
FConnection.IOHandler.WriteBufferClose;
но это не помогло. Как я могу отправить один байт и убедиться, что он отправлен немедленно? И - я добавляю еще один маленький вопрос - как лучше всего отправить целое число, используя indy? К сожалению, я не могу найти функцию наподобие WriteInteger в IOHandler TIdTCPServer ... и
WriteLn (IntToStr (SomeIntVal))
кажется не очень эффективным для меня. Имеет ли значение, использую ли я несколько команд записи в строке или упаковываю вещи в байтовый массив и отправляю это один раз?
Спасибо за любые ответы!
РЕДАКТИРОВАТЬ: я добавил подсказку, что я использую Indy 10, так как, кажется, есть серьезные изменения, касающиеся процедур чтения и записи.