Сериализация объекта для передачи по сети - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте много. Взываю к вам, ибо ответа найти я не могу =( В шарпы пришел из С, и сейчас надо переделать приложение, раннее написанное. Столкнулся со скользким моментом... В С я открывал соккет и бросал туда структуру, в которой хранились данные. Структура отправлялась, а на другой стороне я просто ее принимал и приводил к типу такой же структуры. В шарпах нужно использовать сериализацию объекта, я это понимаю.. Но в инете примеры сериализации только для файлов. В примерах автор открывает поток, допустим Streamwriter и пишет в него объект.. Но вот в чем проблема...
[Serializable]
    public class MSG
    {
        public int type;
        public string message;
        
        public MSG(int t, string m)
        {
            type = t;
            message = m;
        }
    }
Socket sender;
MSG buf = new MSG(1, "123131");
sender = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
try
{
     sender.Connect(_Addr.ipEndPoint);
}
catch (Exception e)
{
     Console.WriteLine("Не удалось соединиться с сервером:");
     Console.WriteLine(e.Message);
}
Console.WriteLine("Connecting to [{0}] complete",
sender.RemoteEndPoint.ToString());
Строку шлет без проблем, а вот с объектами не понимаю. Чтобы сериализовать объект хотел использовать
BinaryFormatter answFormatter = new BinaryFormatter();
answFormatter.Serialize(sender, buf);
Но Serialize работает с потоками, а с соккетами работать отказывается =( Направьте на путь истинный пожалуйста

Решение задачи: «Сериализация объекта для передачи по сети»

textual
Листинг программы
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO; 
 
namespace Serialization
{
    [Serializable]
    class MSG
    {
        public int type;
        public string message;
        
        public MSG(int i, string s)
        {
            type = i;
            message = s;
        }
    }
    
    class Program
    {
        public static byte[] Serialization (MSG obj)
        {
            BinaryFormatter formatter = new BinaryFormatter();          
            MemoryStream stream = new MemoryStream();           
            formatter.Serialize(stream, obj);           
            byte[] msg = stream.ToArray();
            return msg;
        }
        
        public static MSG DeSerialization (byte[] serializedAsBytes)
        {
            MemoryStream stream = new MemoryStream();           
            BinaryFormatter formatter = new BinaryFormatter();          
            stream.Write(serializedAsBytes, 0, serializedAsBytes.Length);           
            stream.Seek(0, SeekOrigin.Begin);           
            return (MSG)formatter.Deserialize(stream); 
        }
        
        public static void Main(string[] args)
        {
            MSG msg = new MSG(1,"Я не сериализован");
            byte[] buf = new byte[1024];
            
            buf = Serialization(msg);
            
            Console.WriteLine("До сериализации  " + buf);
            
            MSG msg1 = new MSG(2,"Текст");
            msg1 = DeSerialization (buf);
            Console.WriteLine("После сериализации  " + msg1.message);
            
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы