Ваше предположение верно;) В Indy 10 нет никаких методов записи в соединении TCP, кроме WriteHeader и WriteRFCStrings.

ю, я задаю много вопросов ... но, как новый разработчик 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, так как, кажется, есть серьезные изменения, касающиеся процедур чтения и записи.

Ответы на вопрос(3)

Ваш ответ на вопрос