1
Delphi TServerSocketコンポーネントをバインドして、特定のローカルアドレスでのみ要求を受け入れる方法を知っている人はいますか?特定のIPアドレスにTServerSocketをバインドする方法
サーバーにはいくつかのIPがありますが、サーバーアプリケーションは実行中の場合にのみ1つのIPで要求を受け入れる必要があります。
Delphi TServerSocketコンポーネントをバインドして、特定のローカルアドレスでのみ要求を受け入れる方法を知っている人はいますか?特定のIPアドレスにTServerSocketをバインドする方法
サーバーにはいくつかのIPがありますが、サーバーアプリケーションは実行中の場合にのみ1つのIPで要求を受け入れる必要があります。
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;
どうもありがとうレミー。このコードは、サーバーソケットアドレス値を正常に更新しています。ただし、サーバーアプリケーションは、アドレスプロパティが明示的にIPに設定された後でも、他のすべてのIPアドレスに応答し続けます。理由は何ですか?それはDelphiソケット制限ですか? – LastManStanding
@LastManStandingあなたが言うことは**サーバが起動された時に 'Address'が空白の場合にのみ起こります**。リスニングソケットは、設定されたIPにバインドされ、そのIP上の接続のみを受け入れることができます。空白の 'Address'にバインドすると、どんなIPでも接続できます。 'Active'をtrueに設定する前に' Address'を設定する必要があります。 –