Witam,
chciałbym napisać prosty server client w tcp wymieniający się objektami klasy serializowanej do xml

Mam klasę:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CA_Serwer
{
    [Serializable]
    public class Person
    {
        private string fn;
        private string ln;
        private int age;

        public string FirstName
        {
            get { return fn; }
            set { fn = value; }
        }

        public string LastName
        {
            get { return ln; }
            set { ln = value; }
        }

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        public Person()
        {
        }

        public Person(string firstname, string lastname, int age)
        {
            this.fn = firstname;
            this.ln = lastname;
            this.age = age;
        }
    }
}

"serwer":


using System; 
using System.Net; 
using System.Net.Sockets;
using CA_Serwer;
using System.Xml.Serialization;
using System.Collections.Generic;

class CA_Server
{ 
  public static void Main() 
  {
      IPAddress ipAddress = IPAddress.Parse("<tutaj mam moje ip>");
      TcpListener server = new TcpListener(ipAddress, 9050);

      server.Start(); 
      TcpClient client = server.AcceptTcpClient(); 
      NetworkStream strm = client.GetStream(); 

      XmlSerializer personXMLSerializer = new XmlSerializer(typeof(Person));
      Person p = (Person)personXMLSerializer.Deserialize(strm);

      Console.WriteLine("Hi, I'm "+p.FirstName+" "+p.LastName+" and I'm "+p.Age+" years old!");

      List<Person> personList = new List<Person>();
      personList.Add(new Person("Maria", "Kowalska", 30));
      personList.Add(new Person("Zofia", "Nowak", 30));
      personList.Add(new Person("Beata", "Wiśniewska", 30));

      strm.Close(); 
      client.Close(); 
      server.Stop();

      Console.ReadKey();
  } 
}

oraz "klienta", w osobnym programie, który również posiada tę samą klasę Person:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Xml.Serialization;

namespace CA_Client
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person("Jan", "Kowalski", 30);
            string serverIp = "<tutaj mam moje ip>";

            TcpClient client = new TcpClient(serverIp, 9050);
            XmlSerializer personXMLSerializer = new XmlSerializer(typeof(Person));
            NetworkStream strm = client.GetStream();

            personXMLSerializer.Serialize(strm, p);

            strm.Close();
            client.Close();

            Console.ReadKey();
        }
    }
}

Chciałbym jeszcze dopisać metodę na serwerze, który w zależności od tego kogo dostanie odeśle na klienta
inną osobę z listy personList (Kowalski> Kowalska itd).
Generalnie, żeby serwer też coś odpowiadał do klienta w formacie XML, zamiast w bajtach.

Z góry dziękuję za pomoc