0

TCP 非同期プロジェクトがあり、接続が閉じられた場合 (サーバーによって閉じられなかった場合)、クライアントをサーバーに再接続するときに問題が発生します。

サーバーが閉じられると、クライアントは次のエラーを受け取ります。

An existing connection was forcibly closed by the remote host at EndReceive(IAyncResult ar) at ReceiveCallback(IAsyncResult ar)

PS: クライアントはサーバーからのみストリームを受信できます。

そうは言っても、どうにかしてサーバーに再接続する必要があることは理解しています。私は何かをしようとしましたが、クライアントが応答せず終了していなかったため、うまくいきませんでした。

私がしたことは、以下の手順を含む受信コールバックのキャッチブロックで、ClientSocket を Disconnected(true) に設定し、while ループ (!ClientSocket.Connected) で、非同期を開始するメインメソッドをリコールしていたことです。コードの最後の行は Thread.Sleep(n); でした。

これらのことは、受信コールバックで行われます

  1. バッファから文字列を取得する
  2. なんでもする..文字列で
  3. 再度呼び出す BeginReceive

PS: 別のポートを使用したくありません。

4

1 に答える 1

0

その例外をキャッチし (特定のエラー コードを探すことができます)、そのソケットを閉じて削除する必要があります。次に、ゼロから新しいものを作成します。

于 2013-04-05T19:21:46.223 に答える