Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2015, 11:03   #1
ne4kin
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 16
По умолчанию Не могу передать сериализованный объект через сокет - C#

Здравствуйте. Проблема возникла в том, что не получается передать сериализованный класс. Переменную передать получается, а класс, структуру нет! Передаю массив байт. Весь интернет перекопал, решения проблемы не нашел. Может кто подскажет что делать?

Сериализация на стороне сервера

Код:
        private byte[] SerializeInBytes(object input)
        {
            byte[] Input; 
            using (MemoryStream stream = new MemoryStream())
            {
                (new BinaryFormatter()).Serialize(stream, input);
                Input = stream.GetBuffer();
            }
            return Input;            
        }

Десериализация на стороне клиента


Код:
        private object DeserializeFromBytes(byte[] input)
        {
            object result = null;
            using (var output = new System.IO.MemoryStream(input))
            {
                result = (new BinaryFormatter()).Deserialize(output);
            }
            return result;
        }
-------------------
Упаковка и отправка на сервере


Код:
        private void Pack(Socket socket)
        {
            turbineOriginal turb = null;
            string name = "225WT1";
            foreach (turbineOriginal t in turbines)
            {
                if (t.GetNameTurbine == name)
                    turb = t;
            }
            if (turb == null)
                throw new Exception("Турбина не найдена");                       
 
            byte[] pack = SerializeInBytes(turb);
            NetworkStream ns = new NetworkStream(socket);
            ns.Write(pack, 0, pack.Length);
        }
Прием и распаковка у клиента

Код:
        private void Recive()
        {
            byte[] reciveBuf = new byte[1024];
            stream.Read(reciveBuf, 0, reciveBuf.Length);
            object a = DeserializeFromBytes(reciveBuf);
            MessageBox.Show(a.ToString());                                  
        }

Компилятор указывает на result = (new BinaryFormatter()).Deserialize(outp ut); в методе DeserializeFromBytes c сообщением:

Не удалось найти сборку "ads, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null".
ne4kin вне форума Ответить с цитированием
Старый 24.08.2015, 11:16   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Весь интернет перекопал, решения проблемы не нашел.
https://www.google.com/search?q=unab...er+deserialize

Класс где находится? Клиент и сервер это что? У них у обоих должна быть сборка (DLL и т.п.) с этим классом (причем скорее всего именно одна и та же, а не просто скопировать класс с тем же именем)

Вообще сериализация в какой-нибудь формат типа JSON, XML, protobuf по-моему обычно проще и удобнее, чем BinaryFormatter.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 24.08.2015 в 11:19.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать простейшую передать файл через Сокет SevenXP C/C++ Сетевое программирование 1 25.05.2011 13:55
Как в Си# передать в функцию объект по значению? vedro-compota Общие вопросы .NET 7 17.01.2011 19:02
Передать двумерный массив через сокет (Debian) Phaeleh Qt и кроссплатформенное программирование С/С++ 1 29.11.2010 07:08
Как передать объект в функцию? BadProgrammer Общие вопросы C/C++ 4 06.11.2010 11:39
Как передать объект по наследству Legat Win Api 6 03.11.2007 11:19