C# - 流读取器问题

问题描述 投票:0回答:3

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

[服务器端]

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

[客户]

textBox3.Text = streamReader.ReadLine();

...它可以工作,但它只返回第一行。当我改变“ 例如,“”与“;”,这样所有内容都在一行上,客户端就会崩溃。

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

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

编辑:

我尝试迭代,这件事有效:

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;
                }
            }
c# networking stream
3个回答
2
投票

我假设

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

textBox3.Text = streamReader.ReadLine();

将读取流中的第一Line


2
投票

您应该使用

StreamReader.ReadToEnd()
来阅读所有行。
ReadNextLine
只会读取一行并停在
\n
字符处。

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


0
投票

StreamReader rdr = new StreamReader("测试数据.txt"); string[] 玩家 = rdr.ReadToEnd().Split(new char[] { ' ' }, System.StringSplitOptions.RemoveEmptyEntries); foreach(玩家中的字符串玩家) { string[] fields =player.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries); if (string.Compare(fields[0], "Batter", true) == 0) lstPlayers.Add(new CBatter(fields[1], double.Parse(fields[2]), int.Parse(fields[3]))); 别的 lstPlayers.Add(new CBowler(fields[1], 新的SB保龄球表演 { WicketsTaken = int.Parse(fields[2]), RunsConceded = int.Parse(fields[3]) })); }

enter code here
//Add data
        /* Hard coded test data
        lstPlayers.AddRange(new APlayer[] 
                            {
                                new CBatter("Andrie Steyn", 27.62, 117), 
                                new CBatter("Laura Wolvaardt", 45.35, 149),
                                new CBatter("Lara Goodall", 23.65, 93),
                                new CBatter("Sune Luus", 25.05, 93),
                                new CBatter("Lizelle Lee", 36.42, 132),
                                new CBatter("Marizanne Kapp", 29.60, 102),
                                new CBatter("Anneke Bosch", 22.20, 58),
                                new CBatter("Sinalo Jafta", 13.66, 28),
                                new CBowler("Nadine de Klerk", new SBowlingPerformance { WicketsTaken=3, RunsConceded = 33 } ),
                                new CBowler("Tumi Sekhukhune", new SBowlingPerformance { WicketsTaken=2, RunsConceded = 20 } ),
                                new CBowler("Nonkululeko Mlaba", new SBowlingPerformance { WicketsTaken=2, RunsConceded = 41 } ),
                            });
        */
© www.soinside.com 2019 - 2024. All rights reserved.