在下面的代码中,我有一个从网络流中读取的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)