为什么streamreader连接到网络流在ReadLine()上返回null?

J C*_*per 4 .net c# tcp

在下面的代码中,我有一个从网络流中读取的StreamReader.这段代码通常可以运行好几天.我遇到了一个问题,突然StreamReader.ReadLine()开始返回null.

根据Microsoft文档,StreamReader.ReadLine()在到达输入流的末尾时将返回null.当底层流是NetworkStream时,这对我没有意义.ReadLine()不应该阻塞直到网络流接收数据?

这是我第一次遇到这个问题而我无法复制它.什么可能导致这个?

背景信息:应用程序从电话交换机接收CDR记录.电话交换机连接到应用程序并发送普通的旧文本记录.在开关连接后,它将保持连接并继续发送永久记录,除非出现故障.

    private void ProcessClient(TcpClient client)
    {
        try
        {
            using (NetworkStream stream = client.GetStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    //continue processing while service is on
                    while (m_RunService & client.Connected)
                    {

                        string curLine = reader.ReadLine();

                        //code here does stuff to string
                        //will catch any exceptions that have to do with 
                        //processing the string
                    }
                }
            }
        }
        catch (Exception ex)
        {
            //write to log
        }
    }
Run Code Online (Sandbox Code Playgroud)

以下是启动侦听器的代码:

    private void Listen()
    {
        try
        {
            while (m_RunService)
            {
                try
                {
                    m_TcpClient = m_TcpListener.AcceptTcpClient();

                    //run on same thread, should only ever be 1 cnx at a time
                    ProcessClient(m_TcpClient);
                }
                catch (Exception ex)
                {
                    //write to log
                }
                finally
                {
                    m_TcpClient.Close();
                }
            }
        }
        finally
        {
            m_TcpListener.Stop();
        }        
    } 
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

StreamReader将阻塞,直到它接收到数据连接被关闭.这听起来像是在服务器端发生的异常,它关闭了连接,而客户端没有收到任何数据.