我有以下情况:
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/