我有以下情况:
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');
并阅读服务器部分发送给我的内容。
任何想法如何解决这个问题?
答案 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;