質問

私は(このコミュニティから多くの助けを借りて)私の最初のクライアント/サーバーアプリをまとめようとしています。

私はIndy 10とDelphi XE2を使用していますが、私の問題はそれらの問題ではなく、Soococketsの仕組みに嘘をつくのではないかと疑っています。

私はしばしば例外のブレークポイントを押して、Alt+F2を押して停止する前にコードを踏み出すため、次の実行はしばしば「すでに接続されている」とヒットし、最終的には「接続が多すぎます」。

どうすればこれを片付けることができますか?

(また、誰もが試してみるデモを持っていますか...除いて、reatehrを除いて...最終的にインディのデモのように?)

役に立ちましたか?

解決

あなたが電話するとき、「すでに接続されている」はクライアント側で発生します Connect() その間 Connected() まだ真実を返します。それは通常、あなたが切断して未読データのままにした場合に発生します IOHandler.InputBuffer. 。をクリアしてみてください InputBuffer 再接続する前に。これには一般的に遭遇するため、Indyの近くの更新がその問題に対処する場合があります。

「接続が多すぎる」とは、サーバーを設定することを意味します MaxConnections ポジティブな非ゼロ値へのプロパティと、新しいクライアントが接続しようとすると、多くの同時クライアントがすでにサーバーに接続されています。あなたがそれほど多くの同時接続を行っているとは思わない場合、それは通常、あなたがあなたのサーバーコードで接続を正しく管理していないので、切断されたクライアントが正しくクリーンアップされることを意味します。その最も一般的な原因は、インディアンの内部例外をキャッチして飲み込む例外ハンドラーをコードに入れていることです。例外をキャッチする場合は、派生したものを再作成してください EIdException そして、サーバーに内部でそれらを処理させます。

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