【发布时间】:2012-11-21 02:29:53
【问题描述】:
我有在本地机器 (127.0.0.1) 上运行的 exe。此 exe 在端口 1234 写入并在 5678 读取。exe 每 50 秒写入一个整数值,例如 1212、4545、6767 等。我想读取该整数值并显示。所以我使用 Indy Client 来达到这个目的。我为此开发了以下代码 sn-p。
IdTCPClient1.Port := 1234; //Set port to connect to
IdTCPClient1.Host := '127.0.0.1'; //Set host to connect to
IdTCPClient1.Connect; //Make connection
sMsg := IdTCPClient1.Socket.ReadLn; //Read the response from the server
ShowMessage(sMsg);
但它没有阅读。调试时卡在了一行 (sMsg := IdTCPClient1.Socket.ReadLn;)
当我尝试使用这样的 telnet 命令执行此操作时 远程登录 127.0.0.1 1234 一些杂项或特殊字符在定期间隔后显示,而不是服务器发送的整数值。
请为此提出任何解决方案。
【问题讨论】:
-
首先,
ReadLn函数在返回之前一直等待,直到它得到一个换行符,如果它是一个普通的换行符还是一个回车符和换行符的组合我不知道。另外,您如何将这些数字作为二进制数据或文本字符串发送? -
服务器应用程序仅在 50 秒后发送整数值(电报在 4 字节大块上作为整数值发送)。这是我知道的全部。我应该使用什么来代替 ReadLn?
-
我不熟悉 Delphi,但我想一个名为
ReadLn的函数需要文本数据,而不是二进制数据。应该有一些名为Read或Receive或类似名称的函数,应该用于任意数据。 -
"strings are null-terminated" 意味着字符串是 c 兼容的,而不是 delphi 兼容的。那么 ReadLn 函数会在这里搜索换行符吗?
标签: delphi sockets tcp delphi-xe2 indy