【问题标题】:Streamreader Readline() throws exceptionStreamreader Readline() 抛出异常
【发布时间】:2015-02-23 23:23:43
【问题描述】:

我有一个与服务器通信的客户端,下面的代码应该在控制台上打印输入的内容 - 这跨越多行。

问题是它显示所有行,然后引发异常。

我尝试了不同的方法来使其正常工作,例如 peek() 这会导致最后一行被切断并引发相同的异常。

我有什么遗漏吗?

using (sr)
{
    try
    {
        while (!sr.EndOfStream)
        {
        Console.WriteLine(sr.ReadLine());
        }
    }
    finally
    {
    sr.Close();
    }
}

异常是:System.IO.IOException: Unable to read data from the transport connection: 连接尝试失败,因为连接方在之后没有正确响应 一段时间,或建立连接失败,因为连接的主机没有响应。

我在using (sr) 之前使用过.ReadTimeout.WriteTimeout

【问题讨论】:

  • 旁注:如果有 using 块,则不需要 try/finally/close。
  • 请检查这是否与您的问题无关:stackoverflow.com/questions/1450263/…
  • sr 分配的其余部分在哪里?它应该都在 using 语句中(请参阅 msdn.microsoft.com/en-us/library/yh598w02.aspx 了解 using 最佳实践)
  • 那么你设置了什么超时?向我们展示整个代码块。我假设网络条件实际上导致您的读取未完成,就像异常所说的那样。

标签: c# sockets streamreader


【解决方案1】:

如果没有更多上下文,这将非常难以排除故障。您的问题可能源于:

  • 权限:该文件可能无法通过应用程序访问。
  • 要读取的文件类型无效。
  • 客户端和服务器之间的问题。

有很多变量,没有更多的上下文。但是,您可以尝试以下操作:

using(var reader = new StreamReader(...))
{
     string line;
     while((line = reader.ReadLine()) != null)
           Console.WriteLine(line);
}

如果可行,则可能是while(!reader.EndOfStream) 将内容逐行转储到控制台之间的问题。

如果您提供更多背景信息,希望我们能提供更好的帮助。

重要提示: 我注意到在您声明StreamReader 时,您实际上并没有指定要读取的文件。这会引发异常,因此您可能还希望在示例中实际添加它。

您的原始IOException 只能生成以下之一:

  • DirectoryNotFoundException
  • EndOfStreamException
  • FileNotFoundException
  • FileLoadException
  • PathTooLongException

这也可以帮助您识别问题。

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2016-08-27
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多