Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получаю меньше байт, чем отправила 
:(
    Опции темы
Dika
Дата 21.1.2013, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



У меня клиент-серверное приложение.Протокол tcpip. Передаю файл. Размер файла 22 Кбайт. Передаю пакетами по 251 байт. Но на клиентской стороне получаю искаженные данные. Записала лог с сервера, все пакеты правильные, по 251 байт. Записала лог с клиента, один или два пакета приходят по 205 байт, а все остальные по 251 байту. Как такое может быть. Клиент и сервер находятся на одном столе. Потом, есть же контрольная сумма у протокола TCP/IP, если бы была ошибка в полученном пакете, то функция бы вернула код ошибки. 

Сервер у меня реализован на С++, клиент на С#.
Код

 byte[] data = new byte[251];
...
          stream.Write(data, 0, 8);
              Array.Clear(data, 0, 8);
                 int bytes=0;
          
                    while ((bytes=stream.Read(data, 0, data.Length)) > 0)
                    {   
                           DecodeData(data); 
                    }       
                 
                    stream.Close();

PM MAIL   Вверх
mihryak
Дата 21.1.2013, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



Stream.Read не гарантирует, что будут прочитаны все байты, вместо этого он возвращает количество реально прочитанных байт. Если оно равно 0, то значит пора заканчивать чтение, в остальных случаях будь готова к любому числу из диапазона 0 < n <= bufferSize.
Если твой DecodeData не завязан на определённый размер пакета, то просто передавай ему это реальное количество в виде параметра.
Иначе придётся сначала собрать все данные, а потом только нарезать на порции нужного размера и скормить их DecodeData.

Это сообщение отредактировал(а) mihryak - 21.1.2013, 18:12
PM MAIL ICQ   Вверх
Dika
Дата 21.1.2013, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



т.е. мои данные никуда не теряются, мне тогда лучше все, что получила поместить в файл, а потом этот файл разбирать. еще инфу не искала, но и для работы файла поток и для работы сокета тоже поток, можно их как-нибудь соединить, или надо отдельный поток для записи в файл создавать

Это сообщение отредактировал(а) Dika - 21.1.2013, 18:20
PM MAIL   Вверх
mihryak
Дата 21.1.2013, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



не, не должны теряться
если есть возможность один поток скармливать другому, то всё вообще хорошо, никакие дополнительные файлы не нужны - просто запоминай количество прочитанных данных в буфер, а в вызове уже Write передавай тот же буфер с полученным значением

Добавлено @ 18:24
(я про то, что если DecodeData использует поток для записи, то этим можно воспользоваться)

Это сообщение отредактировал(а) mihryak - 21.1.2013, 18:24
PM MAIL ICQ   Вверх
Dika
Дата 21.1.2013, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



спасибо, буду пробовать
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.