TCP发送命令并等待输出

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

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

StrResult := Mach3Code('G0X300Y200');

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

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

最佳答案

TIdTelnet 是一个异步组件,它不适合您尝试执行的操作。除非您正在处理实际的 Telnet 协议(protocol),否则您应该改用 TIdTCPClient:

function Mach3Code(const Str: String): String;
begin
  Result := '';
  try
    IdTCPClient1.Connect();
    IdTCPClient1.WriteLn(Str);
    StrOut := IdTCPClient1.ReadLn('#');    
  finally
    IdTCPClient1.Disconnect;
  end;
end;

关于TCP发送命令并等待输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10976618/

相关文章:

string - Delphi - 从字符串表单名称创建自定义表单实例(使用自定义构造函数创建)

string - 如何通过telnet或任何其他程序将字符串数据发送到套接字连接?

Java TCP 选项

sockets - Spring Integration TCP - 在发送数据之前启动消息握手

web-services - delphi中的WSDL导入问题

delphi - TStringGrid 单元格的范围检查是否有效?

java - 为逃生 telnet 编写 unicode 字符

linux - 动态修改数据流

sql-server - 无法建立连接,因为目标机器主动拒绝它 TCP :0 Visual Studio

windows - 当请求的缓冲区大小大于可用数据量时,为什么 recv 会失败?