2011-03-17 12 views
2

アクティブな接続を切断する方法はありますか?私はOnConnectを使って接続を拒否することができますが、接続したときだけです。Delphi IdMappedPortTCP質問

+0

私は、OnOutboundDataを使ってこのようなゲットーを行う方法を見つけました。 – Bryan

答えて

2

はい、TidMappedPortTCPはTidTCPServerの子孫であるため、基本的にはアクティブなクライアントを切断するためにいくつかの方法があります。あなたは(いくつかの任意の基準に基づいて)OnExecuteイベントイベント内のアクティブなクライアントの接続を解除したい場合たとえば、あなたは、単にイベントハンドラ内でこのどこかの操作を行うことができます

AContext.Connection.Disconnect; 

あなたはどこか別のアクティブな接続を切断する必要がある場合(OnExecuteイベントハンドラではない)あなたのコードでは、次のようなアプローチになります。

    アクティブな接続を保持するリスト(TListまたはいくつかのコレクションクラス)を作成します。
  • OnConnectイベントハンドラの内側で、このリストに新しいクライアントを追加します。
  • OnDisconnectイベントハンドラの内部で、切断されたクライアントをこのリストから削除します。

このようにすると、特定のクライアントを見つけてその接続オブジェクトにアクセスし、必要なときにDisconnectメソッドを呼び出すことができるアクティブなクライアントのコレクションが常に存在します。

詳細なコードサンプルが必要な場合はお知らせください。

+0

独自の 'TList'接続を維持する必要はありません。 'TIdTCPerver'は既に' Threads'プロパティ(Indy 9以前)または 'Contexts'プロパティ(Indy 10)のどれかを提供しています。 –