4

c#ここで例を作成しています https://github.com/coolaj86/fizzbuzz/blob/master/tcp-echo-csharp/Main.csに対して実行しnetcatます。

+で終了netcatすると、ソケットが閉じられ、取得されますCTRLC

Unhandled Exception: System.Net.Sockets.SocketException: Connection reset by peer
  at System.Net.Sockets.Socket.EndReceive (IAsyncResult result) [0x00000] in <filename unknown>:0 
  at echo.AsynchronousSocketListener.ReadCallback (IAsyncResult ar) [0x00000] in <filename unknown>:0

私が使用した他の言語では、FIN は 0 バイトの読み取り (または「FIN」または「end」などと呼ばれるイベント) として表されますが、読み取りのメッセージを出力するように例を変更しました。 0 バイトで、メッセージが表示されません。

接続を閉じるクライアントを処理するにはどうすればよいですか?

System.Net.Foo.Bar.CloseHandler()「使うか」などの答えを探していますSystem.Net.Foo.Bar.ErrorHandler()

4

1 に答える 1

1

よくわかりませんが、優雅に行う方法はないと思います。接続が適切に閉じられると、クライアントの切断に関する通知が届くためです。ただし、CTRL + C でプログラムの実行を中断するのは、この場合ではありません。したがって、この問題を解決するには、例外を処理することをお勧めします。

于 2012-08-06T19:53:01.013 に答える