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

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

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

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

Клиент:

Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. using System.Runtime.Serialization;
  9. using System.Runtime.Serialization.Formatters.Binary;
  10. namespace ClientTcp
  11. {
  12. class Program
  13. {
  14. class Person
  15. {
  16. public string FirstName;
  17. public string LastName;
  18. public int age;
  19. public Person(string i, string s, int k)
  20. {
  21. FirstName = i;
  22. LastName = s;
  23. age = k;
  24. }
  25. }
  26. public static void Main()
  27. {
  28. try
  29. {
  30. string serverIp = "127.0.0.1";
  31. Int32 port = 9050;
  32. Person p = new Person("Иван", "Иванов", 20);
  33. TcpClient client = new TcpClient(serverIp, port);
  34. IFormatter formatter = new BinaryFormatter(); // Модуль форматирования, который будет сериализовать класс
  35. NetworkStream strm = client.GetStream(); // поток
  36. formatter.Serialize(strm, p); // процесс сериализации
  37. strm.Close();
  38. client.Close();
  39. }
  40. catch (ArgumentNullException e)
  41. {
  42. Console.WriteLine("ArgumentNullException: {0}", e);
  43. }
  44. catch (SocketException e)
  45. {
  46. Console.WriteLine("SocketException: {0}", e);
  47. }
  48. Console.WriteLine("\nНажмите enter для продолжения...");
  49. Console.Read();
  50. }
  51. }
  52. }

Сервер:

Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. using System.Runtime.Serialization;
  9. using System.Runtime.Serialization.Formatters.Binary;
  10.  
  11. namespace TcpServer
  12. {
  13. class Programm
  14. {
  15. class Person
  16. {
  17. public string FirstName;
  18. public string LastName;
  19. public int age;
  20. public Person(string i, string s, int k)
  21. {
  22. FirstName = i;
  23. LastName = s;
  24. age = k;
  25. }
  26. }
  27. public static void Main()
  28. {
  29. try
  30. {
  31. TcpListener server = new TcpListener(9050);
  32. server.Start();
  33. TcpClient client = server.AcceptTcpClient();
  34. NetworkStream strm = client.GetStream();
  35. IFormatter formatter = new BinaryFormatter();
  36. Person p = (Person)formatter.Deserialize(strm);
  37. Console.WriteLine("Меня зовут: " + p.FirstName + " " + p.LastName + " и мне " + p.age);
  38. strm.Close();
  39. client.Close();
  40. server.Stop();
  41. }
  42. catch (ArgumentNullException e)
  43. {
  44. Console.WriteLine("ArgumentNullException: {0}", e);
  45. }
  46. catch (SocketException e)
  47. {
  48. Console.WriteLine("SocketException: {0}", e);
  49. }
  50. Console.WriteLine("\nНажмите enter для продолжения...");
  51. Console.Read();
  52. }
  53. }
  54. }

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

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

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы