Delphi XE3、Indy 10.5.9.0Delphi Indy IdTCPServerおよびIdTCPClient。読み取りと書き込みの制御文字とテキスト
私はコンピュータと計測器の間のインターフェイスを作成しています。機器はASTMプロトコルを使用します。
私は正常にサーバーとクライアントの間でテキストベースのメッセージをやりとりしました。私は制御文字をサーバに送り、それらを読むことができました。私が3日間の検索をしてもわからないことは、制御文字とテキストが混在したメッセージをどのように書いて読んでいくかです。
次のような制御文字とテキストが必要なASTMプロトコルメッセージを送信しています。山括弧内のすべてが制御文字です。メッセージを書くことは私が問題にぶつかるところではない。私はテキストと制御文字の両方を受け取るので、それを読むときです。私のコードは以下の通りです。どのようにキャラクターがコントロールキャラクターであるかどうか、コントロール文字列とテキストキャラクターの同じ文字列内のテキストであるかどうかを私はどのように知ることができますか?レミー・ルボーとこのサイトの彼のポストのおかげで私はどこにいるのか教えてくれました。彼はバッファの使い方について話しましたが、制御文字とテキスト文字を含むバッファを読み込む方法を教えていませんでした。
<STX>3O|1|G-13-00017||^^^HPV|R||||||N||||||||||||||O<CR><ETX>D3<CR><LF>
私は...
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;
をOnExecuteイベントイベント
...
AContext.Connection.IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;
...
私のサーバー...私は制御文字を送信することを可能にすることになっているのOnConnectイベント私のサーバーコンポーネントに次のコードを追加しました
うわー:
はこのような何かを試してみてください!私はこの記事のすべての良いものを消化しようとしています!なぜあなたは 'lastbyte ='行に$を、ReadLn行に#を使用していますか? –
'lastbyte'はバイトです。 '$ 5'は数値で、' Byte(5) 'に相当し、ちょうどクリーナーです。 'ReadLn()'と 'WaitFor()'はバイトではなく文字列で動作します。 '#2'と'#3'は文字値( 'Char(2)'と 'Char(3)')です。 –
readまたはreadlnを「タイムアウト」する方法はありますか? –