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