StreamReader.EndOfStream产生IOException

时间:2010-06-17 23:53:19

标签: c# sockets streamreader ioexception

我正在开发一个接受TCP连接并读取数据的应用程序,直到读取</File>标记,然后将该数据写入文件系统。我不想断开连接,我想让客户端发送数据,这样他们就可以在一个连接中发送多个文件。

我在我的outter循环周围使用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);
}

2 个答案:

答案 0 :(得分:1)

我会把它放在try-catch块中。这种方式在抛出异常时你可以检查它,以及它是否是IOException,它通常在超时时发生;或者断开的连接超时(即发送者已经消失)并在捕获中以最适合您需求的方式处理它。

答案 1 :(得分:0)

您必须将整个while子句包装在异常处理程序中,因为您不知道客户端何时断开连接以及您是否在多个位置调用流读取器。