| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Распределённые приложения и сеть > Получаю меньше байт, чем отправила |
| Автор: Dika 21.1.2013, 16:00 | ||
| У меня клиент-серверное приложение.Протокол tcpip. Передаю файл. Размер файла 22 Кбайт. Передаю пакетами по 251 байт. Но на клиентской стороне получаю искаженные данные. Записала лог с сервера, все пакеты правильные, по 251 байт. Записала лог с клиента, один или два пакета приходят по 205 байт, а все остальные по 251 байту. Как такое может быть. Клиент и сервер находятся на одном столе. Потом, есть же контрольная сумма у протокола TCP/IP, если бы была ошибка в полученном пакете, то функция бы вернула код ошибки. Сервер у меня реализован на С++, клиент на С#.
|
| Автор: mihryak 21.1.2013, 18:10 |
| Stream.Read не гарантирует, что будут прочитаны все байты, вместо этого он возвращает количество реально прочитанных байт. Если оно равно 0, то значит пора заканчивать чтение, в остальных случаях будь готова к любому числу из диапазона 0 < n <= bufferSize. Если твой DecodeData не завязан на определённый размер пакета, то просто передавай ему это реальное количество в виде параметра. Иначе придётся сначала собрать все данные, а потом только нарезать на порции нужного размера и скормить их DecodeData. |
| Автор: Dika 21.1.2013, 18:19 |
| т.е. мои данные никуда не теряются, мне тогда лучше все, что получила поместить в файл, а потом этот файл разбирать. еще инфу не искала, но и для работы файла поток и для работы сокета тоже поток, можно их как-нибудь соединить, или надо отдельный поток для записи в файл создавать |
| Автор: mihryak 21.1.2013, 18:23 |
| не, не должны теряться если есть возможность один поток скармливать другому, то всё вообще хорошо, никакие дополнительные файлы не нужны - просто запоминай количество прочитанных данных в буфер, а в вызове уже Write передавай тот же буфер с полученным значением Добавлено @ 18:24 (я про то, что если DecodeData использует поток для записи, то этим можно воспользоваться) |
| Автор: Dika 21.1.2013, 18:27 |
| спасибо, буду пробовать |