1

我有以下情况:

function Mach3Code(Str: String): String;
 var StrOut: String;
 begin
   StrOut := '';

   try
     IdTelnet1.Connect();
     IdTelnet1.Write(Str);

     StrOut := ''; // assign here return output;

   finally
     IdTelnet1.Disconnect;
   end;

   Result := StrOut;

 end;

在“StrOut := '';”行上 我需要获取服务器的文本输出(这是一个 tcp 服务器,我用 vc 2008 作为 Mach3 插件编写)。

通常,客户端发送“COMMAND1”,服务器回复“ANSWER1#”或类似的东西。我需要代码等待答案,然后同步返回,所以我可以执行以下操作:

StrResult := Mach3Code('G0X300Y200');

并阅读服务器部分发送给我的内容。

有什么想法可以解决这个问题吗?

4

2 回答 2

0

要接收数据,将 TIdTelnetDataAvailEvent 类型的事件处理程序分配给 idtelnet1 的 OnDataAvailable 属性,我知道这不是同步的,但我会重新考虑您的代码以这种方式工作,因为这就是 telnet 客户端的工作方式。

未能创建您自己的 TIdTCPClientCustom 后代并使用相关方法实现您自己的读取线程。

于 2012-06-11T21:13:40.823 回答
0

TIdTelnet是一个异步组件,它不适合您尝试做的事情。除非您正在处理实际的 Telnet 协议,否则您应该使用TIdTCPClient

function Mach3Code(const Str: String): String;
begin
  Result := '';
  try
    IdTCPClient1.Connect();
    IdTCPClient1.WriteLn(Str);
    StrOut := IdTCPClient1.ReadLn('#');    
  finally
    IdTCPClient1.Disconnect;
  end;
end;
于 2012-06-12T00:57:48.563 回答