6

Tcpclientが切断されたときに(たとえばサーバー自体によって)サーバーに自動再接続するための最良の方法は何ですか?

私が現在使用しているコードは次のとおりです。

public void ClientWork()
{
        TcpClient client = new TcpClient();

        try
        {
            try
            {
                client.Connect(ip, port);
            }
            catch(Exception ex)
            {
                logger.ErrorFormat("client.Connect: {0}", ex.Message);
                return false;
            }

            NetworkStream ns = client.GetStream();
            byte[] buff;

            while (__bRunning)
            {
                buff = new byte[1000];
                ns.Read(buff, 0, 1000);

                string line = System.Text.Encoding.Default.GetString(buff);
            }

            //ns.Close();
            client.Close();
        }
        catch(Exception e)
        {
            //Reconnect?
            client.Close();
            client = null;

            return false;
        }
}

C#.NETを使用しています

4

1 に答える 1

1

切断された接続の通知を受け取るために使用できるイベントはありません。

2つの解決策が考えられます。

  1. ポーリング。別のスレッドで継続的に行われるソケットをポーリングしようとする別のスレッドがあります。サーバーソケットからのクライアントの切断を即座に検出するを参照してください

  2. ソケットまたはソケットを使用しているインターフェースを低レベルで制御している場合は、読み取りおよび書き込みメソッドに対して try..catch を実行するか、読み取りおよび書き込みメソッドのラッパーに対して try..catch を実行して、例外が発生したときに再実行できます。接続して読み書きしてみてください。

于 2011-05-31T12:40:04.377 に答える