【发布时间】:2016-04-23 21:04:08
【问题描述】:
德尔福 XE3,印地 10.5.9.0
我正在创建计算机和仪器之间的接口。仪器采用 ASTM 协议。
我已经成功地在服务器和客户端之间来回发送基于文本的消息。我已经能够将控制字符发送到服务器并读取它们。经过 3 天的搜索,我还没有弄清楚如何编写和阅读混合了控制字符和文本的消息。
我正在发送需要控制字符和文本的 ASTM 协议消息,如下行所示。尖括号中的所有内容都是控制字符。写信息不是我遇到问题的地方。这是在阅读它的时候,因为我会收到文本和控制字符。下面的代码是我读取控制字符的方式。如何判断何时获取字符是否为控制字符以及何时为同一控制字符串和文本字符中的文本?感谢 Remy Lebeau 和他在这个网站上的帖子让我到达了现在的位置。他谈到了如何使用缓冲区,但我不知道如何读取包含控制字符和文本字符的缓冲区。
<STX>3O|1|G-13-00017||^^^HPV|R||||||N||||||||||||||O<CR><ETX>D3<CR><LF>
我已将以下代码添加到我的服务器组件 OnConnect 事件中,该事件应该允许我发送控制字符...
...
AContext.Connection.IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;
...
我的服务器 OnExecute 事件...
procedure TTasksForm.IdTCPServer1Execute(AContext: TIdContext);
var
lastline : WideString;
lastcmd : WideString ;
lastbyte : Byte ;
begin
ServerTrafficMemo.Lines.Add('OnExecute') ;
lastline := '' ;
lastcmd := '' ;
lastbyte := (AContext.Connection.IOHandler.ReadByte) ;
if lastbyte = Byte(5) then
begin
lastcmd := '<ENQ>' ;
ServerTrafficMemo.Lines.Add(lastcmd) ;
AContext.Connection.IOHandler.WriteLn(lastcmd + ' received') ;
end;
end;
【问题讨论】: