Delphi で TUdpSocket を使用しようとしています。私がやりたいことは、UDP サーバーに接続し、データを送信して応答を待つことです。データは正しく送信されますが、コントロールは何も受信しません。どうしてか分かりません。私はこの問題に何時間も苦労してきましたが、あきらめるつもりです:-(。
TIdUDPClient を使ってみましたが、状況は同じです。データは正しく送信されますが、何も受信されません。
TIdUDPServer のみが、データの送受信の両方で多かれ少なかれ適切に機能します。残念ながら、データ受信は別のスレッド (ThreadedEvent プロパティに応じてメインまたはその他) によって処理されるため、同期を使用する必要があり、コード全体が複雑になります。自分のスレッドで UDP 接続を処理したいと思います。データを送信し、WaitForData() を呼び出して応答を待ってから、同じスレッドで処理します。
もし不可能なら、私はサードパーティのコントロールを使いたくありませんが、それが唯一の解決策であるなら、私はそれを受け入れます.
事前にご連絡いただき、誠にありがとうございました。
---- 例 ---
i) TUDPソケット:
var
lR, lW, lE: boolean;
begin
UdpSocket1.LocalPort := '1600';
UdpSocket1.RemotePort := '1600';
UdpSocket1.RemoteHost := '127.0.0.1';
UdpSocket1.Connect;
UdpSocket1.Sendln('test');
UdpSocket1.Select(@lR, @lW, @lE, 2000);
if lR then
ShowMessage(UdpSocket1.Receiveln());
end;
ご覧のとおり、コントロールは送信したデータを受信する必要があります。Select() メソッドが呼び出された後に lR が true と評価されるため、明らかにそうです。ただし、ReceiveIn() は、ReceiveBuf() と同様に空の文字列を返します。UDP サーバーを起動してデータを送信すると、正しく受信されるので、データが実際に送信されていることは確かです。