2

最近、Indy 10 TIdTCPServer を使用して Delphi 2010 で記述されたサーバーをリリースしました。リモート フィールド エンジニアは、スマートフォンを使用して、定義済みのポートでサーバーに接続します。ある特定の顧客から、一定期間 (1 日、2 日) などの後、クライアントのデバイスで ECONNREFUSED (接続拒否) が発生したことがわかりました。この時点で、リモート エンジニアはサーバーに接続できません。なぜこれが当てはまるのか、誰にでもわかりましたか?

どんな助けでも大歓迎です。

敬具

短所

4

2 に答える 2

1

私の最初の疑いは、OnConnection OnExecute または OnDisconnect のイベント ハンドラーのデッドロックです。

接続コンテキスト (スレッド) 間で正しく同期していますか?

ただし、サーバーコードを投稿して確認できるようにする必要があります。

于 2013-01-14T14:21:27.913 に答える
1

ECONNREFUSED次の 2 つの可能性のいずれかを意味します。

  1. 接続先の IP/ポートをリッスンするサーバー ソケットはありません。
  2. リッスンしているサーバーがありますが、保留中の接続のバックログがいっぱいで、その時点で新しいクライアントの接続要求を受け入れることができません。

#1 については、NETSTAT や TCPView などのポート表示ツールを使用して、サーバーがまだ実行中であり、リッスンしているポートがまだ開いていて、LISTENING 状態であることを確認します。

#2については、サーバーのOnListenExceptionイベントがトリガーされているかどうかを確認します。これは、サーバーがバックログからの接続の受け入れに問題があることを示しています.

于 2013-01-15T07:05:45.820 に答える