質問

DelphiアプリケーションでTServerSocketコンポーネントを使用しています。クライアント接続を制限したいと思います。たとえば、1,000に制限します。残念ながら、私はそれを行う方法がわかりません。コンポーネントは、「MaxConnections」などのプロパティや、このようなプロパティを提供しません。

OnGetThreadイベントを使用して、新しいサーバースレッド(TServerClientThread)を作成します。アクティブな接続の数を取得するには、「Socket.ActiveConnections」プロパティを使用しました。

残念ながら、その後何をすべきかわかりません。接続数が制限を超えている場合、OnGetThreadプロシージャ内にスレッドを作成しないようにしましたが、何も変わりませんでした-クライアントは、情報を送受信できない場合でも、サーバーに接続して接続を維持できます。新しいクライアントの接続を許可しない、またはただ接続を許可するだけで接続を即座に切断するにはどうすればよいですか?

役に立ちましたか?

解決

Delphiを使用した最後の時間は数年前でしたが、同様の状況に対処し、私の経験はあなたに役立つ可能性がありました。 (大きな)アプリケーションは移植する価値がなかったため、コンポーネント。 覚えている限りでは、サーバーソケットで onClientConnect イベントを持っている必要があり、ここで制限を確認しました:

.onClientConnect( Sender: TObject; aSocket: T... )
begin
    if( YourServerSocket.ActiveConnections > YourDefinedMaxConnections )
    begin
        // Drop the connection
        aSocket.Close;
    end;
end

それ以外は思い出せませんが、これらの行で何かをしたと思います。少なくとも、これが思いついたことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top