9 / 9 / 3
Регистрация: 22.01.2010
Сообщений: 141
1

Ошибка при передаче данных UDPClient

24.01.2013, 23:54. Показов 5500. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Делаю лабу по сетевому взаимодействию. Есть два приложения А и Б, используя UDPClient приложение А должно отправлять данные приложению Б в асинхронном режиме.
Все работает если отсылать небольшой объем данных(текст, числа). Но при отправке большего объема (например изображение), выдает ошибку при завершении процедуры передачи данных: "Сообщение, отправленное на сокет датаграмм, было больше, чем буфер внутренних сообщений или был превышен иной сетевой параметр. Также возможно, что буфер для принятия сообщения был меньше, чем размер сообщения".

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  public void send(String xml, Encoding encoding)
        {
            //Получаем байты текста в указанной кодировке
            byte[] textBuffer = encoding.GetBytes(xml);
                        
            //Отправляем данные в асинхронном режиме
            udpClient.BeginSend(textBuffer, textBuffer.Length, 
            new IPEndPoint(remoteAddress, remotePort), 
            new AsyncCallback(sendCallBack), udpClient);
 
        }
 
        //Этот метод вызывается, когда завершена отправка  данных
        private void sendCallBack(IAsyncResult result)
        {
 
            //Получаем на вход клиента            
            UdpClient udpClient = (UdpClient)result.AsyncState;
            
            //Реально завершаем процедуру передачи
            udpClient.EndSend(result);
         
            //генерируем событие "Передача окончена"
            SendCompleted();          
 
            }
Метод принимающий данные

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 //Этот метод будет вызван каждый раз, когда в режиме асинхронного ожидания кто-то подключится
        private void connectCallBack(IAsyncResult result)
        {
 
            UdpClient listener = (UdpClient)result.AsyncState;
 
            IPEndPoint ipEndPoint = new IPEndPoint(localAddress, localPort);
 
            byte[] data = listener.EndReceive(result, ref ipEndPoint);
 
            isConnected = true;
 
            List<byte> list = new List<byte>(data);
 
            ReceiveCompleted(list.ToArray());
 
 
        }
Добавлено через 3 часа 15 минут
Ситуация прояснилась. UDP не может передавать данные объемом больше 65 тыс. байт. Надо разбить данные и передавать частями в асинхронном режиме. Как это можно реализовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2013, 23:54
Ответы с готовыми решениями:

UdpClient + loopback interface. При создании UdpClient вываливатся SocketException
Вкратце. Делаю эмулятор сети. Создал через код в подключения Адаптер замыкания самого...

Ошибка при передаче данных в GridView
Среда: WPF Ошибка: Произошла ошибка базового поставщика в Open. Код: private void...

Ошибка при передаче данных в клиент-серверном приложении
Здравствуйте, вот код клиент-серверного приложения: Клиент: private void button1_Click(object...

Потеря данных при передаче по TCP
Система сложная, отслеживает и записывает все происходящее. В итоге получается вот что: сервер...

0
24.01.2013, 23:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2013, 23:54
Помогаю со студенческими работами здесь

Ошибка при передаче изображения по TCP
Ошибка при передаче изображения по TCP? Клиент: Bitmap printscreen = new...

Не мог понять в чем ошибка в передаче данных по локальной сети
Реализовал программу для передачи сообщений по локальной сети(Интерфейс на скр.1(прикрепил к...

Ошибка в имени файла при передаче по e-mail
Здравствуйте. Пишу программу частичным заданием которой является отправка файла по почте. При этом...

Некорректное отображение кириллицы при передаче данных от сервера клиенту
Здравствуйте. ПИшу проект, в котором нужно передавать текст от сервера к клиенту и наоборот....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru