UDP サーバー

指定したポートで UDP データグラムを待ち受け、各データグラムをアプリケーションに振り分けます。TsgcSTUNServer や TsgcTURNServer を支えるのと同じエンジンです。

TsgcUDPServer

高性能な UDP リスナーです。ポートにバインドして任意のピアからデータグラムを受信し、特定のエンドポイントへ応答し、ワーカースレッドにより複数コアでスケールします。

コンポーネントクラス

TsgcUDPServer

プロトコル

UDP (RFC 768)

プラットフォーム

Windows, macOS, Linux, iOS, Android

エディション

Professional / Enterprise

配置して待ち受け、応答するだけ

Port を設定し Active := True にすれば、OnMessage で受信したデータグラムを処理し、Connection.WriteData で応答できます。1 つのソケットで任意の数のリモートピアに対応します。

uses
  sgcP2P;

var
  Server: TsgcUDPServer;
begin
  Server := TsgcUDPServer.Create(nil);
  Server.Port := 4000;

  Server.OnMessage := procedure(Connection: TsgcUDPConnection;
    const aText: string)
  begin
    // echo back to the originating peer
    Connection.WriteData('echo: ' + aText);
  end;

  Server.Active := True;
end;
// uses: sgcP2P
TsgcUDPServer *Server = new TsgcUDPServer(this);
Server->Port = 4000;
Server->Active = true;

主な機能

マルチスレッド対応の UDP リスナーで、各データグラムをワーカープールに振り分け、応答パスとして TsgcUDPConnection を提供します。

1 ポートで多数のピアに対応

バインドされた 1 つのソケットで、任意の数のリモートエンドポイントからのデータグラムを処理します。OnMessage ごとに、送信元の PeerIP / PeerPort を識別する TsgcUDPConnection が渡されます。

応答パス

Connection.WriteData は、同じソケットを使用して送信元のピアにデータグラムを送り返します。追加の送信側バインディングは不要です。

スレッド分散処理

受信パケットはワーカープールで処理されます。ハンドラーの処理が重い場合は WorkerCount で調整してください。受信スレッドがブロックされることはありません。

IPv4 / IPv6 / デュアルスタック

IPVersion によって、IPv4 専用、IPv6 専用、デュアルスタックのいずれかのバインディングに対応します。マルチキャストグループへの参加は JoinMulticastGroup から利用できます。

TsgcSTUNServer / TsgcTURNServer の基盤

RFC 8489 / 8656 を完全実装した STUN および TURN サーバーは、本コンポーネントの上に構築されています。同様の方法で任意のカスタム UDP プロトコルを実装できます。

フラグメント禁止ヒント

送信時に DontFragment := True を設定できます。カスタムプロトコルでの経路 MTU 探索に有用です。

仕様と参考資料

このコンポーネントが実装するプロトコルの一次資料です。

ドキュメントとデモ

コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、そして体験版のダウンロードはこちらです。

オンラインヘルプ — TsgcUDPServer 本コンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。
デモプロジェクト — Demos\35.P2P\01.UDP_Server_Client すぐに実行可能なサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。下記より体験版をダウンロードしてください。
技術ドキュメント (PDF) 本コンポーネントのみを対象とした機能解説、クイックスタート、Delphi および C++ Builder のコードサンプル、一次資料への参照を収録しています。
ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した総合マニュアルです。

UDP サーバーを動かしませんか?

体験版をダウンロードして、Delphi で UDP データグラムを待ち受けましょう。