Csharp/CSharp Tutorial/Network/Object Send Receive

Материал из .Net Framework эксперт
Версия от 15:20, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Object data sender/Receiver

<source lang="csharp">using System; using System.Net; using System.Net.Sockets; using System.Text; class EmployeeClient {

  public static void Main()
  {
     Employee emp1 = new Employee();
     Employee emp2 = new Employee();
     TcpClient client;
     emp1.ID = 1;
     emp1.LastName = "D";
     emp1.FirstName = "C";
     emp1.YearsService = 12;
     emp1.Salary = 35.50;
     emp2.ID = 2;
     emp2.LastName = "B";
     emp2.FirstName = "A";
     emp2.YearsService = 9;
     emp2.Salary = 23.30;
     client = new TcpClient("127.0.0.1", 9050);
     NetworkStream ns = client.GetStream();
     byte[] data = emp1.GetBytes();
     int size = emp1.size;
     byte[] packsize = new byte[2];
     packsize = BitConverter.GetBytes(size);
     ns.Write(packsize, 0, 2);
     ns.Write(data, 0, size);
     ns.Flush();
     data = emp2.GetBytes();
     size = emp2.size;
     packsize = new byte[2];
     packsize = BitConverter.GetBytes(size);
     ns.Write(packsize, 0, 2);
     ns.Write(data, 0, size);
     ns.Flush();
  
     ns.Close();
     client.Close();    
  }

}


class Employee {

  public int ID;
  private int LastNameSize;
  public string LastName;
  private int FirstNameSize;
  public string FirstName;
  public int YearsService;
  public double Salary;
  public int size;
  public Employee()
  {
  }
  public Employee(byte[] data)
  {
     int place = 0;
     ID = BitConverter.ToInt32(data, place);
     place += 4;
     LastNameSize = BitConverter.ToInt32(data, place);
     place += 4;
     LastName = Encoding.ASCII.GetString(data, place, LastNameSize);
     place = place + LastNameSize;
     FirstNameSize = BitConverter.ToInt32(data, place);
     place += 4;
     FirstName = Encoding.ASCII.GetString(data, place, FirstNameSize);
     place += FirstNameSize;
     YearsService = BitConverter.ToInt32(data, place);
     place += 4;
     Salary = BitConverter.ToDouble(data, place);
  }
  public byte[] GetBytes()
  {
     byte[] data = new byte[1024];
     int place = 0;
     Buffer.BlockCopy(BitConverter.GetBytes(ID), 0, data, place, 4);
     place += 4;
     Buffer.BlockCopy(BitConverter.GetBytes(LastName.Length), 0, data, place, 4);
     place += 4;
     Buffer.BlockCopy(Encoding.ASCII.GetBytes(LastName), 0, data, place, LastName.Length);
     place += LastName.Length;
     Buffer.BlockCopy(BitConverter.GetBytes(FirstName.Length), 0, data, place, 4);
     place += 4;
     Buffer.BlockCopy(Encoding.ASCII.GetBytes(FirstName), 0, data, place, FirstName.Length);
     place += FirstName.Length;
     Buffer.BlockCopy(BitConverter.GetBytes(YearsService), 0, data, place, 4);
     place += 4;
     Buffer.BlockCopy(BitConverter.GetBytes(Salary), 0, data, place, 8);
     place += 8;
     size = place;
     return data;
  }
  public void Display(){
     Console.WriteLine("ID = {0}", ID);
     Console.WriteLine("LastName = {0}", LastName);
     Console.WriteLine("FirstName = {0}", FirstName);
     Console.WriteLine("YearsService = {0}", YearsService);
     Console.WriteLine("Salary = {0}\n", Salary);
  }

}</source>