public static void Main() { TcpClient server = new TcpClient("127.0.0.1", 7000); // 서버에 접속 NetworkStream ns = server.GetStream(); // NetworkStream 얻기 SerialExample ex1 = new SerialExample(); // 직렬화 인스턴스 생성 ex1.id = 1; ex1.name = "홍길동"; ex1.kor = 80; ex1.math = 50; ex1.eng = 100; IFormatter formatter = new SoapFormatter(); // IFormatter 생성 MemoryStream strm = new MemoryStream(); // 메모리 스트림 생성 formatter.Serialize(strm, ex1); // 메모리 스트림에 직렬화 인스턴스 생성 byte[] data = strm.GetBuffer(); int data_size = (int)strm.Length; byte[] size = BitConverter.GetBytes(data_size); // 메모리 스트림 전체 크기전송 ns.Write(size, 0, 4); // 전송할 데이터 사이즈 전송 ns.Write(data, 0, data_size); // 메모리 스트림에 있는 데이터 전송 ns.Flush(); strm.Close(); ns.Close(); server.Close(); }
public static void Main() { TcpListener server = new TcpListener(7000); // TCP 7000번 포트 열기 server.Start(); TcpClient client = server.AcceptTcpClient(); // 외부에서 클라이언트 접속하면 NetworkStream ns = client.GetStream(); // NetworkStream 객체를 얻어옴 MemoryStream strm = new MemoryStream(); // 메모리 스트림 생성 byte[] data = new byte[4]; int recv_size = ns.Read(data, 0, 4); // 수신할 스트림 데이터 크기 알아내기 int size = BitConverter.ToInt32(data, 0); int receive = 0; while (size > 0) // 상대방이 보낸 직렬화 스트림 읽기 { data = new byte[1024]; recv_size = ns.Read(data, 0, size); strm.Write(data, receive, recv_size); receive += recv_size; size -= recv_size; } strm.Position = 0; IFormatter formatter = new SoapFormatter(); // 직렬화 인스턴스 복원 SerialExample ex1 = (SerialExample)formatter.Deserialize(strm); Console.WriteLine("ex1.id= " + ex1.id + " ex1.name= " + ex1.name); Console.WriteLine("ex1.kor=" + ex1.kor + " ex1.math=" + ex1.math + " ex1.eng=" + ex1.eng); Console.WriteLine("ex1.date =" + ex1.date.ToString()); strm.Close(); ns.Close(); client.Close(); server.Stop(); }