Изображение не отправляется по UDP из-за меньшего размера буфера C # - PullRequest
0 голосов
/ 19 января 2012

Я отправляю Растровое изображение изображение, закодированное в виде jpeg * через UDP-сокет *. Проблема заключается в том, что изображения каждый раз изменяются. Контейнер - это Пакет изображений , который состоит из нескольких или одного изображения с информацией идентификатора пакета.

Серверная часть

MemoryStream Ms = new MemoryStream();
bformatter.Serialize(Ms, container);
byte[] TestingFlow = Ms.GetBuffer();
ServerSocket.SendTo(TestingFlow, 54000, 
                    SocketFlags.None, RemoteEndpoint);

Клиентская сторона

byte[] Recievedbytes = UdpListener.Receive(ref RemoteEndPoint);
ImageStream = new MemoryStream(Recievedbytes, 0, Recievedbytes.Length);
imagecontainer = (ImageContainer)bformater.Deserialize(ImageStream);

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Я почти уверен, что вы должны использовать

ServerSocket.SendTo(TestingFlow,TestingFlow.Length,
                    SocketFlags.None, RemoteEndpoint);

на стороне сервера

0 голосов
/ 19 января 2012

UDP для отправки файла изображения? Ни за что.

Если вы хотите сохранить целостность данных, забудьте об этом. TCP - лучший протокол.

UDP предназначен для отправки небольших пакетов данных, где важна скорость, а не целостность данных, поэтому его используют в играх в Интернете. Датаграммы могут поступать не по порядку, дублироваться или полностью исчезать. UDP не имеет встроенной проверки или исправления ошибок. Это оставлено приложению, если требуется. Отсюда его скорость над надежностью.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...