開発時に接続が多すぎます
-
26-10-2019 - |
質問
私は(このコミュニティから多くの助けを借りて)私の最初のクライアント/サーバーアプリをまとめようとしています。
私はIndy 10とDelphi XE2を使用していますが、私の問題はそれらの問題ではなく、Soococketsの仕組みに嘘をつくのではないかと疑っています。
私はしばしば例外のブレークポイントを押して、Alt+F2を押して停止する前にコードを踏み出すため、次の実行はしばしば「すでに接続されている」とヒットし、最終的には「接続が多すぎます」。
どうすればこれを片付けることができますか?
(また、誰もが試してみるデモを持っていますか...除いて、reatehrを除いて...最終的にインディのデモのように?)
解決
あなたが電話するとき、「すでに接続されている」はクライアント側で発生します Connect()
その間 Connected()
まだ真実を返します。それは通常、あなたが切断して未読データのままにした場合に発生します IOHandler.InputBuffer
. 。をクリアしてみてください InputBuffer
再接続する前に。これには一般的に遭遇するため、Indyの近くの更新がその問題に対処する場合があります。
「接続が多すぎる」とは、サーバーを設定することを意味します MaxConnections
ポジティブな非ゼロ値へのプロパティと、新しいクライアントが接続しようとすると、多くの同時クライアントがすでにサーバーに接続されています。あなたがそれほど多くの同時接続を行っているとは思わない場合、それは通常、あなたがあなたのサーバーコードで接続を正しく管理していないので、切断されたクライアントが正しくクリーンアップされることを意味します。その最も一般的な原因は、インディアンの内部例外をキャッチして飲み込む例外ハンドラーをコードに入れていることです。例外をキャッチする場合は、派生したものを再作成してください EIdException
そして、サーバーに内部でそれらを処理させます。