それは間違いなく可能です。
「UDPまたはマルチキャスト」に関しては、リンゴとオレンジを話している. マルチキャストは IP の概念であるため、マルチキャスト IP またはブロードキャスト IP でUDPを問題なく使用できます。
すべてのクライアントをリンクローカルにするという制限 (ルーターなどは一般にブロードキャスト パケットを転送しない) に問題がない場合は、ブロードキャストを使用することをお勧めします。TIdUdpBase.Broadcast は、ここであなたの友達になります。
更新:マルチキャストでもブロードキャストでも、特定の IP/ポート ペアにバインドできるソケットは 1 つだけです。したがって、複数のクライアントがすべて同じブロードキャスト/マルチキャストをリッスンする必要がある場合は、追加のディスパッチャ クライアントが必要になると思います。このディスパッチャ クライアントはブロードキャストを受信し、マシン上のすべてのクライアントに通知します。
各クライアント内には、「ブロードキャストが送信されるポートにバインドしてみてください。できる場合は、そのポートにディスパッチャ クライアントをセットアップしてください。できない場合は、ディスパッチャがすでに作成されており、そのディスパッチャに登録してください。」
その登録プロセスは、ローカルホスト IP で使用可能な任意のポートにバインドし、ディスパッチャーに「この IP/ポートにブロードキャストを送信してください」と言うだけで済みます。
更新: Christopher Chaseの考えは正しいです。IdIPMCastClient にパッチを適用し、プロパティ ReuseAddr: Boolean を追加し、TIdIPMCastClient.GetBinding を追加して変更したことを除いて、彼とほぼ同じソリューションを完成させました。
if Self.ReuseAddr then begin
SetReuseAddr := Id_SO_True;
Bindings[i].SetSockOpt(Id_SOL_SOCKET, Id_SO_REUSEADDR, @SetReuseAddr, Sizeof(SetReuseAddr));
end;
AllocateSocket と Bind の呼び出しの間 (SetReuseAddr: Integer)。