【发布时间】:2014-04-24 12:23:38
【问题描述】:
我正在使用 Delphi XE4 中的 Indy10,并尝试与网络上的 TCP 服务器建立简单的 TCP 连接。服务器发送一个简单的 Hello World 消息,然后断开连接,并等待另一个连接。我有以下代码,用于连接并尝试从服务器读取消息。
with Client do
begin
Host := '10.10.81.122';
Port := 3490;
Connect;
if IOHandler.Connected then
writeln('Connected!');
if IOHandler.InputBufferIsEmpty then
begin
if IOHandler.CheckForDataOnSource(1000) then
begin
writeln('Buffer size:' + IntToStr(IOHandler.RecvBufferSize));
IOhandler.ReadBytes(buffer, IOHandler.RecvBufferSize);
end
else
writeln('Message not received');
end;
end;
当我运行这段代码时,我得到了一个 recvBufferSize 的值,但缓冲区仍然是空的,然后我得到一个连接正常终止的消息。
【问题讨论】:
-
Hello World 是否被换行符终止?在这种情况下,代码可以简单得多(使用 IOHandler.ReadLn)
-
我更改了发送端的代码,使其以换行符终止。但我还是想知道如何正确使用 IOHandler.ReadBytes
-
我正在使用 IOHandler.ReadBytes(buf, -1);读取整个套接字缓冲区。