1

</File>TCP接続を受け入れ、マーカーが読み取られるまでデータを読み取り、そのデータをファイルシステムに書き込むアプリケーションに取り組んでいます。切断したくないので、クライアントにデータを送信させて、1つの接続で複数のファイルを送信できるようにします。

アウターループの周りを使用してStreamReader.EndOfStreamいますが、クライアントが切断するとIOExceptionがスローされます。これを行うためのより良い方法はありますか?

private static void RecieveAsyncStream(IAsyncResult ar)
{
    TcpListener listener = (TcpListener)ar.AsyncState;
    TcpClient client = listener.EndAcceptTcpClient(ar);

    // init the streams
    NetworkStream netStream = client.GetStream();
    StreamReader streamReader = new StreamReader(netStream);
    StreamWriter streamWriter = new StreamWriter(netStream);

    while (!streamReader.EndOfStream) // throws IOException
    {
         string file= "";
         while (file!= "</File>" && !streamReader.EndOfStream)
         {
              file += streamReader.ReadLine();
         }
         // write file to filesystem
    }
    listener.BeginAcceptTcpClient(RecieveAsyncStream, listener);
}
4

2 に答える 2

1

これをtry-catchブロックに入れます。このようにして、例外がスローされたときにそれをチェックし、それが通常タイムアウト時に発生するIOExceptionであるかどうかを確認できます。または、接続のタイムアウトが壊れている(つまり、送信者がなくなっている)場合は、ニーズに合った最善の方法で処理します。

于 2010-06-18T00:14:04.067 に答える
0

クライアントが切断され、複数の場所でストリームリーダーを呼び出しているかどうかがわからないため、while句全体を例外ハンドラーでラップする必要があります。

于 2010-06-18T12:16:46.390 に答える