使用自定义终结符使用indy读取字符串

时间:2013-08-05 09:37:27

标签: delphi indy freepascal lazarus

我正在使用TIdTcpServer组件来实现基本的服务器端应用程序。我有客户端发送字符串到服务器,ascii编码,结束于字符#@。

例如:

  

this_is_a_sample#@        thisis_another_sample#@

我的OnExecute方法如下:

procedure TLX8511.ProcessEvent(AContext: TIdContext);
var
  recv : String;
begin
    with AContext.Connection.IOHandler do
    begin
          CheckForDataOnSource(20);
          if not InputBufferIsEmpty then
          begin
              recv := ReadLn('#@');
              WriteLn(recv);
          end;
    end;
end

然而,当执行ReadLn时,我收到一个奇怪的错误:必须指定缓冲区终结符

我做错了什么?

LE:我在Linux上使用Indy和lazarus,所以这可能是一些移植问题

谢谢。

1 个答案:

答案 0 :(得分:3)

我不想回答我自己的问题,但根据David Heffernan的建议,我自己解决了这个问题。

事实证明你必须指定编码以避免该异常,所以这里是解决方案:

procedure TLX8511.ProcessEvent(AContext: TIdContext);
var
  recv : String;
  encoding : IIdTextEncoding;
begin
    encoding := IndyTextEncoding_ASCII;
    with AContext.Connection.IOHandler do
    begin
          CheckForDataOnSource(20);
          if not InputBufferIsEmpty then
          begin
              recv := ReadLn('#@',encoding,encoding);
              WriteLn(recv);
          end;
    end;
end;