6

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

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

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

4

1 に答える 1

14

前回Delphiを使用したのは数年前ですが、同様の状況に対処する必要があり、私の経験はあなたに役立つ可能性があります。同じ問題に直面していて、(大きな)アプリケーションは移植する価値がありませんでした。私が覚えている限り、サーバーソケットでonClientConnectイベントが発生するはずです。ここで、制限を確認しました。

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

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

于 2009-01-03T13:23:30.960 に答える