Сериализация объекта для передачи по сети - C#
Формулировка задачи:
Здравствуйте много.
Взываю к вам, ибо ответа найти я не могу =(
В шарпы пришел из С, и сейчас надо переделать приложение, раннее написанное. Столкнулся со скользким моментом... В С я открывал соккет и бросал туда структуру, в которой хранились данные. Структура отправлялась, а на другой стороне я просто ее принимал и приводил к типу такой же структуры. В шарпах нужно использовать сериализацию объекта, я это понимаю.. Но в инете примеры сериализации только для файлов. В примерах автор открывает поток, допустим Streamwriter и пишет в него объект..
Но вот в чем проблема...
Строку шлет без проблем, а вот с объектами не понимаю.
Чтобы сериализовать объект хотел использовать
Но Serialize работает с потоками, а с соккетами работать отказывается =(
Направьте на путь истинный пожалуйста
[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);
Решение задачи: «Сериализация объекта для передачи по сети»
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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д