gpt4 book ai didi

c# - 我在使用 StreamReader/StreamWriter 读取多条消息时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:36 25 4
gpt4 key购买 nike

我需要在客户端接收多条消息,但 ReadLineAsync() 只读取第一条消息。

    //Server Side
StreamWriter StwWriter = new StreamWriter(client.GetStream())
{
AutoFlush = true
};
for (int i = 0; i < 10; i++)
{
StwWriter.WriteLine("test");
}
// Client Side
public async void WaitMessages()
{
while (LoginChat.Client.Connected)
{
try
{
var reader = new StreamReader(LoginChat.Client.TcpClt.GetStream());
var data = await reader.ReadLineAsync();
MessageBox.Show(data);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
WaitMessages();

输出仅显示第一条消息。怎么了?

最佳答案

StreamReader 有内部缓冲区,所以当你这样做时:

var reader = new StreamReader(LoginChat.Client.TcpClt.GetStream());
var data = await reader.ReadLineAsync();

它可能阅读了不止一行。如果您随后继续使用相同的 StreamReader 实例来获取下一行,这不是问题,但您只是读取一行然后丢弃 StreamReader。这意味着缓冲区中的所有内容都丢失了。

修复 - 不要在每个循环迭代中创建新的 StreamReader,而是使用一个实例:

public async Task WaitMessages()
{
var reader = new StreamReader(LoginChat.Client.TcpClt.GetStream());
while (LoginChat.Client.Connected)
{
try
{
var data = await reader.ReadLineAsync();
MessageBox.Show(data);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}

关于c# - 我在使用 StreamReader/StreamWriter 读取多条消息时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49850208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com