![]() |
|
Модераторы: gambit |
![]()
|
|
| Dika |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
У меня клиент-серверное приложение.Протокол tcpip. Передаю файл. Размер файла 22 Кбайт. Передаю пакетами по 251 байт. Но на клиентской стороне получаю искаженные данные. Записала лог с сервера, все пакеты правильные, по 251 байт. Записала лог с клиента, один или два пакета приходят по 205 байт, а все остальные по 251 байту. Как такое может быть. Клиент и сервер находятся на одном столе. Потом, есть же контрольная сумма у протокола TCP/IP, если бы была ошибка в полученном пакете, то функция бы вернула код ошибки.
Сервер у меня реализован на С++, клиент на С#.
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
Stream.Read не гарантирует, что будут прочитаны все байты, вместо этого он возвращает количество реально прочитанных байт. Если оно равно 0, то значит пора заканчивать чтение, в остальных случаях будь готова к любому числу из диапазона 0 < n <= bufferSize.
Если твой DecodeData не завязан на определённый размер пакета, то просто передавай ему это реальное количество в виде параметра. Иначе придётся сначала собрать все данные, а потом только нарезать на порции нужного размера и скормить их DecodeData. Это сообщение отредактировал(а) mihryak - 21.1.2013, 18:12 |
|||
|
||||
| Dika |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
т.е. мои данные никуда не теряются, мне тогда лучше все, что получила поместить в файл, а потом этот файл разбирать. еще инфу не искала, но и для работы файла поток и для работы сокета тоже поток, можно их как-нибудь соединить, или надо отдельный поток для записи в файл создавать
Это сообщение отредактировал(а) Dika - 21.1.2013, 18:20 |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
не, не должны теряться
если есть возможность один поток скармливать другому, то всё вообще хорошо, никакие дополнительные файлы не нужны - просто запоминай количество прочитанных данных в буфер, а в вызове уже Write передавай тот же буфер с полученным значением Добавлено @ 18:24 (я про то, что если DecodeData использует поток для записи, то этим можно воспользоваться) Это сообщение отредактировал(а) mihryak - 21.1.2013, 18:24 |
|||
|
||||
| Dika |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
спасибо, буду пробовать
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |