2

電子機器から送信される情報を読み取る必要があります(UDPプロトコルを使用)。Delphi 7でIndyコンポーネント(バージョン9)を使用する際に問題が発生しました。以下に私のコードを示します。

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であり、明らかに「バッファ」コンテンツは私が期待するものではありません...私は何が間違っているのですか?

前もって感謝します、

イマノール

4

1 に答える 1

3

このままでは、リモート ペアとバインド先の任意のローカル IP/ポート ペアとTIdUDPClientの間に静的な関連付けを作成します。その IP/Portから送信されたパケットのみを受信できます。デバイスはパケットの送信先を知る必要があり、送信先の IP/ポートで受信する必要があります。Indy 9 でhasとproperties があったかどうかは覚えていませんが、Indy 10 ではそうです。192.168.1.1:49152TIdUDPClient192.168.1.1:49152TIdUDPClientBoundIPBoundPort

ReceiveTimeoutミリ秒単位で表されます。適切に設定したとしてもTIdUDPClient、50 ミリ秒というのはデータが到着するまでの待ち時間が非常に短いため、ReceiveBuffer()単にタイムアウトになる可能性があります。少なくとも数秒の価値がある、より大きなタイムアウト値を使用してみてください。

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

于 2012-05-11T15:25:27.480 に答える