我知道,我问了很多问题...但作为一个新的Delphi开发人员,我总是遇到这些问题 :)
这个问题涉及使用Indy 10进行TCP通信。为了使通信更有效率,我将客户端操作请求编码为单个字节(在大多数情况下后面跟随其他数据字节,但在这种情况下只有一个单独的字节)。问题是
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发送整数的最佳方法是什么?不幸的是,我无法在TIdTCPServer的IOHandler中找到类似于WriteInteger的函数...
WriteLn (IntToStr (SomeIntVal))
我觉得这样做效率不高。如果我连续使用多个写命令,或者把它们打包在一个字节数组中一次发送,这会有什么区别吗?
非常感谢您的回答!
编辑:由于读写过程似乎发生了重大变化,我添加了一个提示,我正在使用 Indy 10。