Sending and receiving custom objects using Tcpclient class in C#

后端 未结 3 785
孤独总比滥情好
孤独总比滥情好 2021-02-01 09:52

I have a client server application in which the server and the client need to send and receive objects of a custom class over the network. I am using TcpClient class for transmi

3条回答
  •  萌比男神i
    2021-02-01 10:27

    Have a look at this code. It takes a slightly different approach.

    Example given by the link above: - Note: there was another problem he was facing which he solved here (keep-alive). It's in the link after the initial sample code.

    Object class to send (remember the [Serializable]):

    [serializable] 
    public class Person { 
       private string fn; 
       private string ln; 
       private int age; 
       ... 
       public string FirstName { 
          get { 
             return fn; 
          } 
          set { 
             fn=value; 
          } 
       } 
       ... 
       ... 
       public Person (string firstname, string lastname, int age) { 
          this.fn=firstname; 
          ... 
       } 
    } 
    

    Class to send object:

    using System; 
    using System.Net; 
    using System.Net.Sockets; 
    using System.Runtime.Serialization; 
    using System.Runtime.Serialization.Formatters.Binary; 
    
    class DataSender 
    { 
      public static void Main() 
      { 
       Person p=new Person("Tyler","Durden",30); // create my serializable object 
       string serverIp="192.168.0.1"; 
    
       TcpClient client = new TcpClient(serverIp, 9050); // have my connection established with a Tcp Server 
    
       IFormatter formatter = new BinaryFormatter(); // the formatter that will serialize my object on my stream 
    
       NetworkStream strm = client.GetStream(); // the stream 
       formatter.Serialize(strm, p); // the serialization process 
    
       strm.Close(); 
       client.Close(); 
      } 
    } 
    

    Class to receive object:

    using System; 
    using System.Net; 
    using System.Net.Sockets; 
    using System.Runtime.Serialization; 
    using System.Runtime.Serialization.Formatters.Binary; 
    
    class DataRcvr 
    { 
      public static void Main() 
      { 
       TcpListener server = new TcpListener(9050); 
       server.Start(); 
       TcpClient client = server.AcceptTcpClient(); 
       NetworkStream strm = client.GetStream(); 
       IFormatter formatter = new BinaryFormatter(); 
    
       Person p = (Person)formatter.Deserialize(strm); // you have to cast the deserialized object 
    
       Console.WriteLine("Hi, I'm "+p.FirstName+" "+p.LastName+" and I'm "+p.age+" years old!"); 
    
       strm.Close(); 
       client.Close(); 
       server.Stop(); 
      } 
    }
    

提交回复
热议问题