私はdelphiを初めて使っています。これが私の最初のプロジェクトです。私は、ローカルネットワークに接続されたデバイスを持っているIdTCPClient.IOHandler.ReadStream()!が正常に終了しました。
procedure TForm1.Button2Click(Sender: TObject);
responseStringFromServer:TStringStream;
begin
try
if IdTCPClient1.Connected then
begin
dataSentToDevice:= 'http/1.0 content-length: 344 content-type: text/xml <?xml version="1.0" encoding="UTF-8" ?> ...'
IdTCPClient1.IOHandler.WriteLn(dataSentToDevice);
responseStringFromServer := TStringStream.Create;
IdTCPClient1.IOHandler.ReadStream(responseStringFromServer);
...
: は、ここでは、コードの少しです。私はそれに成功して接続することができます。送信コマンドは、あまりにも取り組んでいるが、私は
IdTCPClient1.IOHandler.ReadStream(responseStringFromServer);
を行うとき、それは、デバイスが処理を行われ、例外が発生したゴマ待つ:「接続クローズ優雅に」。だから私は、デバイスが私に送ることになっているデータを読み取ることができません。デバイスがシャットダウンしていません。私は他の投稿を読んだことがあり、そのデバイス自体が接続を切断することを理解しています。
私はそれと通信するデモプログラムを持っており、正常に動作します。私はそれが接続をドロップする前に応答xmlを取得する必要があります。
また、リクエストはhttpで、私はIdTCPClientを使用しています(xmlリクエストを使用する必要があります。私はTidHTTPでそれを行う方法を知らない)。 デバイスが応答を送信した後、接続を切断して、データを受信する前にtcpclientの接続が切断されたことを示すことがあります。
助けていただけたら幸いです!
正常に動作するデモプログラムがある場合は、ネットワークスニファ(WireShark)を使用してその動作を確認し、通信フローとDelphiアプリケーションを比較します。ドンのプロキシhttp://donsproxy.moneybender.com/のようなHTTPプロキシも使用できます - ネットワークスニッフィングより簡単かもしれません。 – mjn
合意。デバイスの実際のプロトコルに関するドキュメントがない場合は、パケットスニッファが次善策です。 –