【问题标题】:C# - stream reader issueC# - 流阅读器问题
【发布时间】:2013-09-21 04:31:32
【问题描述】:

所以基本上我正在用 c# 开发一个网络程序,我正在尝试使用流阅读器将一个字符串从服务器发送到客户端,但我遇到了一个非常奇怪的问题。当我使用此代码时...

[服务器端]

foreach (DataRow row in StocksTable.Rows)
            {
                stocks += row["description"] + "," + row["buy"] + "," + row["sell"] + ",";
            }

[客户]

textBox3.Text = streamReader.ReadLine();

... 它可以工作,但它只返回第一行。当我用“;”更改“\n”时例如,如果所有内容都在一行上,客户端就会崩溃。

我尝试使用迭代器打印所有行,但效果不佳。

我知道这听起来很有趣,可能有一些简单的解释,但我已经被困了一段时间,我感到困惑。

编辑:

我尝试了迭代,这件事奏效了:

for (int i = 0; i < 5; i++)
            {
                textBox3.Text += streamReader.ReadLine();
            }

(5是字符串的行数)

但这不是:

while (true)
            {
                string s = streamReader.ReadLine();
                if (s != null)
                {
                    textBox3.Text += s;
                }
                else
                {
                    break;
                }
            }

【问题讨论】:

  • 你能提供更多代码吗?您使用的是哪些类?
  • 您正在使用 readline - \n 终止该行。如果您遍历所有行,您可能会看到您所追求的。我对崩溃的猜测是字符串的大小对于文本框来说太大了?
  • 客户端崩溃 -- 异常详情是什么?
  • 我尝试使用迭代器来打印所有行,但效果不佳——它怎么会不起作用?这段代码是什么样的?
  • 它不起作用我的意思是客户端只是冻结并且它说一段时间后没有响应。客户端是一个 GUI,而服务器只是控制台,所以我真的看不出客户端的问题到底是什么。

标签: c# networking stream


【解决方案1】:

我将假设stocks 是一个字符串。一个字符串可以包含多行(行定义为由 CR、LF 或 CRLF 分隔的字符串)。在这种情况下,您似乎正在使用\n 在字符串中创建多行。有:

textBox3.Text = streamReader.ReadLine();

将读取流中的第一

【讨论】:

    【解决方案2】:

    您应该使用StreamReader.ReadToEnd() 来读取所有行。 ReadNextLine 只会读取一行并在 \n 字符处停止。

    如果您进行迭代,您应该检查是否还有更多内容可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      相关资源
      最近更新 更多