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

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

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

Отредактировал найденный пример из сети, но при работе клиента выбивает ошибку: Необработанное исключение типа ссылая на formatter.Serialize(strm, p);

Клиент:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace ClientTcp
{
    class  Program
    {
        class Person
        {
            public string FirstName;
            public string LastName;
            public int age;
 
            public Person(string i, string s, int k)
            {
                FirstName = i;
                LastName = s;
                age = k;
            }
        }
        public static void Main()
        {
            try 
            { 
                string serverIp = "127.0.0.1";
                Int32 port = 9050;
                Person p = new Person("Иван", "Иванов", 20);
                TcpClient client = new TcpClient(serverIp, port);
                IFormatter formatter = new BinaryFormatter(); // Модуль форматирования, который будет сериализовать класс
 
                NetworkStream strm = client.GetStream(); // поток
                formatter.Serialize(strm, p); // процесс сериализации
 
                strm.Close();
                client.Close();
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine("ArgumentNullException: {0}", e);
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
            Console.WriteLine("\nНажмите enter для продолжения...");
            Console.Read();
        }
    }
}

Сервер:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

namespace TcpServer
{
    class Programm
    {
        class Person
        {
            public string FirstName;
            public string LastName;
            public int age;
 
            public Person(string i, string s, int k)
            {
                FirstName = i;
                LastName = s;
                age = k;
            }
        }
        public static void Main()
        {
           try 
            { 
            TcpListener server = new TcpListener(9050);
            server.Start();
            TcpClient client = server.AcceptTcpClient();
            NetworkStream strm = client.GetStream();
            IFormatter formatter = new BinaryFormatter();
            Person p = (Person)formatter.Deserialize(strm);
            Console.WriteLine("Меня зовут: " + p.FirstName + " " + p.LastName + " и мне " + p.age);
 
            strm.Close();
            client.Close();
            server.Stop();
            }
           catch (ArgumentNullException e)
           {
               Console.WriteLine("ArgumentNullException: {0}", e);
           }
           catch (SocketException e)
           {
               Console.WriteLine("SocketException: {0}", e);
           }
           Console.WriteLine("\nНажмите enter для продолжения...");
           Console.Read();
        }
    } 
}

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

textual
Листинг программы
bool isServer = Console.ReadLine() == "s";
if (isServer)
    Server();
else
    Client();

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

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