Csharp/CSharp Tutorial/Network/Object Send Receive — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 15:20, 26 мая 2010
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>