Я работаю над проектом, в котором вам нужно получить данные с сервера и отобразить их в пользовательском интерфейсе. Это сервер групп новостей, который содержит в общей сложности около 250 групп.
Вывод с сервера ДОЛЖЕН, насколько я понимаю, храниться в объекте NetworkStream и считываться из StreamReader, который сохраняет каждую строку в строку.
Это работает, но, к сожалению, похоже, что оно не заканчивает все чтение до завершения вызова метода.
В следующий раз, когда я вызываю другую команду и читаю ее из StreamReader, она возвращает остаток вывода предыдущей команды.
Я боролся с этим уже несколько часов и не могу понять, как это исправить.
Это мой код:
public ObservableCollection<Newsgroup> GetNewsGroups()
{
ObservableCollection<Newsgroup> newsgroups = new ObservableCollection<Newsgroup>();
if(connectionStatus.Equals(ConnectionStatus.CONNECTED) && loginStatus.Equals(LoginStatus.LOGGED_IN))
{
byte[] sendMessage = Encoding.UTF8.GetBytes("LIST\n");
// Write to the server
ns.Write(sendMessage, 0, sendMessage.Length);
Console.WriteLine("Sent {0} bytes to server...", sendMessage.Length);
ns.Flush();
// b) Read from the server
reader = new StreamReader(ns, Encoding.UTF8);
// We want to ignore the first line, as it just contains information about the data
string test = reader.ReadLine();
Console.WriteLine(test);
string recieveMessage = "";
if (ns.CanRead)
{
while (reader.Peek() >= 0)
{
recieveMessage = reader.ReadLine();
Console.WriteLine("Got this message {0} back from the server", recieveMessage);
// This part will simply remove the annoying numbers after the newsgroup name
int firstSpaceIndex = recieveMessage.IndexOf(" ");
string refactoredGroupName = recieveMessage.Substring(0, firstSpaceIndex);
newsgroups.Add(new Newsgroup { GroupName = refactoredGroupName });
}
}
}
return newsgroups;
}