2016-10-17 16 views
1

Delphi TServerSocketコンポーネントをバインドして、特定のローカルアドレスでのみ要求を受け入れる方法を知っている人はいますか?特定のIPアドレスにTServerSocketをバインドする方法

サーバーにはいくつかのIPがありますが、サーバーアプリケーションは実行中の場合にのみ1つのIPで要求を受け入れる必要があります。

答えて

5

TServerSocketは、あなたが求めている機能を直接公開していませんが、ほんの少しの回避策で対応できます。

保護されたTAbstractSocket.Addressプロパティにアクセスするには、新しいクラスをTServerSocketから派生させる必要があります。これはTServerSocketがバインドする値です。プロパティには通常アクセスできないため、空の文字列のままです。0.0.0.0(別名INADDR_ANY、つまりすべてのローカルIP)へのバインディングと同じです。

プロパティにアクセスできるようになると、サーバーをアクティブにする前に任意のIPに設定して、サーバーを適切にバインドします。例えば

type 
    TServerSocketAccess = class(TServerSocket) 
    end; 

TServerSocketAccess(ServerSocket1).Address := '192.168.0.1'; 
ServerSocket1.Active := True; 
+0

どうもありがとうレミー。このコードは、サーバーソケットアドレス値を正常に更新しています。ただし、サーバーアプリケーションは、アドレスプロパティが明示的にIPに設定された後でも、他のすべてのIPアドレスに応答し続けます。理由は何ですか?それはDelphiソケット制限ですか? – LastManStanding

+0

@LastManStandingあなたが言うことは**サーバが起動された時に 'Address'が空白の場合にのみ起こります**。リスニングソケットは、設定されたIPにバインドされ、そのIP上の接続のみを受け入れることができます。空白の 'Address'にバインドすると、どんなIPでも接続できます。 'Active'をtrueに設定する前に' Address'を設定する必要があります。 –

関連する問題