Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
1

Передача сериализованных данных по сети

09.12.2016, 11:57. Показов 1211. Ответов 0

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Есть сервис (по совместительству - сервер), который сериализует список объектов и отправляет клиенту следующим образом:
C#
1
2
3
4
5
6
7
using (MemoryStream stream = new MemoryStream())
{
    List<User> users = Data.notes;
    foreach (User user in users)
        new BinaryFormatter.Serialize(stream, user);
    socket.Send(stream.GetBuffer());
}
Клиентом является WPF-приложение. Клиент принимает и десериализует данные:
C#
1
2
3
4
5
6
7
8
9
byte[] bytes = new byte[8192]; 
socket.Receive(bytes);
...
List<User> users = new List<User>();
using (MemoryStream stream = new MemoryStream(bytes))
{
    while (stream.Length != stream.Position)
        users.Add((User)new BinaryFormatter.Deserialize(stream));
}
Клиент успешно десериализует первые несколько объектов, после чего выбрасывает SerializationException и сообщение
Отсутствует идентификатор сборки для типа объекта "Network.User".
В библиотеке Network класс User помечен как сериализуемый.
В чём может быть проблема?
Заранее спасибо за помощь.

Добавлено через 2 часа 3 минуты
РЕШЕНО

Проблема оказалось в размере буфера для приема на стороне клиента, размер буфера должен быть равен размеру полученных с сервера данных (ни больше, ни меньше).
В качестве решения я добавил согласование размера буфера между клиентом и сервером перед отправкой данных.
На стороне сервера:
C#
1
2
3
4
new BinaryFormatter().Serialize(stream, Data.notes);
byte[] buffer = stream.GetBuffer();
socket.Send(BitConverter.GetBytes(buffer.Length));
socket.Send(buffer);
На стороне клиента:
C#
1
2
3
4
byte[] size = new byte[4];
socket.Receive(size);
byte[] bytes = new byte[BitConverter.ToInt32(size, 0)];
socket.Receive(bytes);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2016, 11:57
Ответы с готовыми решениями:

передача по HTTP сериализованных объектов
Задача - jsp скрипт сериализует объект, и должен его передать клиенту. Возникает две трудности: 1)...

Передача данных по сети с задержкой. Как корректно передать размер данных до самого сообщения? Делаю на сокетах
Клиент отправляет запрос, сервер возвращает скрин. На создание уходит время, и цикл передачи do...

Передача данных по сети
Я не знаю как передавать данные по локальной сети от одного EXE файла к другому. Если можно...

Передача данных по сети
Привет знатоки! Возник небольшой вопрос: recv(sck_ex, buff_rcv, 512, 0); эта функция в моей...

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

Передача данных по сети
Покажите простой пример передачи например строки по TCP или UDP на одном компьютере(loopback)....

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

Передача данных по сети
Добрый день, я некоторое время пытаюсь учить язык программирования, а конкретно С++, несмотря на...

Передача данных по сети
Есть TCP соединение. Для передачи данных использую StreamReader.ReadLine и StreamWriter.WriteLine....


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

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