Re[4]: Не могу понять, как правильно передавать по сети..
От: Аноним  
Дата: 01.11.06 11:13
Оценка:
нет. не нормально.

попробую объяснить проблему.

Теоретически:
клиент шлёт запрос на поиск допусти всех файлов *.txt на сервере.
Сервер начинает поиск. Нашёл первый файл и отправил его клиенту.
Клиент получает и добавляет имя и путь файла в listbox.

Практически:
С Сервером всё нормально. Посылает по одному файлу за раз.
А вот с Клиентом...
Вот код процедуры, которая принимает соообщения:
            try
            {
                // Заканчивает чтение данных в readBuffer и возвращает кол-во прочитанных байт
                lock (Client.GetStream())
                {
                    BytesRead = Client.GetStream().EndRead(ar);
                }
                if (BytesRead < 1)
                {
                    // TO_DO!!! если ничего не было прочитано то server закрыт. Отметить, что разъединено в catch
                    // MarkAsDisconnected();
                    return;
                }
                // конвертируем в кодировку UTF8 и отнимаем 2 байта: Chr(13) и Chr(10)
                strMessage = Encoding.UTF8.GetString(readBuffer, 0, BytesRead - 2);
                                //fl.WriteLine(strMessage);
                // анализируем команды
                ProcessCommands(strMessage);
                // заново начинаем чтение
                Client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(DoRead), null);
            }


Первый раз всё нормально, в strMessage содержиться ровно одно имя и путь файла (структура такова — "FOUNDFILE|путь и имя файл|"). А вот потом в strMessage начинают накапливаться имена и пути файлов, т.е. типа такого "FOUNDFILE|файл1|FOUNDFILE|файл2|FOUNDFILE|файл3|FOUNDFILE|файл4|FOUNDFILE|файл5|FOUNDFILE|файл6|FOUNDFILE|файл7|"
и всё бы ничего, но это последовательность в строке может прерваться в самый неподходящий момент, например на середине файла или команды...
Так вот как избежать такого?
Как мне быть уверенным, что приметься только "FOUNDFILE|путь и имя файл|" и всё.
Как сделать, чтобы не накапливалась строка?
Делать огромный буфер на приём (да и то не факт...)?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.