2012-05-11 14 views
2

(UDPプロトコルを使用して)電子デバイスから送信された情報を読む必要があります。私はDelphi 7でIndyコンポーネント(バージョン9)を使用する際に問題が発生しています。以下で私のコードを見ることができます。Delphi Indy IdUdpClient読み取り操作、データが返されない

procedure TForm1.Button1Click(Sender: TObject); 
var 
    buffer: Array of Byte; 
    bytes_received: integer; 
begin 
    SetLength(buffer, 36); 
    IdUDPClient1.Host:='192.168.1.1'; 
    IdUDPClient1.Port:=49152; 
    IdUDPClient1.BufferSize:=36; 

    IdUDPClient1.Active:=True; 
    IdUDPClient1.ReceiveTimeout:=50; 
    bytes_received:=IdUDPClient1.ReceiveBuffer(buffer,Sizeof(buffer)); 
    IdUDPClient1.Active:=False; 
end 

「bytes_received」の出力値が0である、とobviusly、内容は私が期待するものではありません「バッファ」...私が間違って何をしているのですか? TIdUDPClientあなたがされている方法を使用して、事前に

おかげで、

Imanol

答えて

3

は、あなたがTIdUDPClientはに結合することをリモート192.168.1.1:49152ペアとどんなランダムなローカルIP /ポートのペア間の静的な関連付けを作成しています。 192.168.1.1:49152からそのIP /ポートに送信されたパケットだけを受信できます。デバイスはパケットの送信先を知る必要があり、送信先のIP /ポートで受信する必要があります。 TIdUDPClientはインディ9でBoundIPBoundPort特性を有しているが、それはインディ10で

ReceiveTimeoutはミリ秒単位で表現されない場合、私はぶっきらぼう覚えていません。 TIdUDPClientが正しく設定されていても、データが到着するのを待つ時間は50msと非常に短いので、ReceiveBuffer()は単に時間切れになる可能性があります。少なくとも数秒間、より大きなタイムアウト値を使用してみてください。

代わりにTIdUDPServerを使用してください。 Bindingsプロパティを、データを受信するローカルIP /ポートのペアで設定してから、新しいデータがリモートIP /ポートから到着するたびにOnUDPReadイベントを通知させます。

+0

不幸にもIndy 9はBoundIpとBoundPortのプロパティを持っていません... – user1361263

+0

... Indy 10を使用するか、UDPサーバーを使用する必要があります – user1361263