TCP发送命令并等待输出

时间:2012-06-11 08:24:31

标签: tcp delphi-7 telnet indy

我有以下情况:

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服务器,由我作为Mach3插件在vc 2008中编写)。

通常,客户端发送“COMMAND1”,服务器回复“ANSWER1#”或类似的内容。我需要代码等待答案然后同步返回它,所以我可以做类似的事情:

StrResult := Mach3Code('G0X300Y200');

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

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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;