title: c# send receive object over network?
body: <p>I'm working on a server/client project. The client will be asking the server for info and the server will send them back to the client</p>
  
  <p>The info may be string, number, array, list, arraylist or any other object. The solution I found so far is to serialize the object (data) and send it then de-serialize it to process.</p>
  
  <p>Here is the server code:</p>
  
  <pre><code>public void RunServer(string SrvIP,int SrvPort)
      {
          try
          {
              var ipAd = IPAddress.Parse(SrvIP);
  
  
              /* Initializes the Listener */
              if (ipAd != null)
              {
                  var myList = new TcpListener(ipAd, SrvPort);
  
                  /* Start Listeneting at the specified port */
                  myList.Start();
  
                  Console.WriteLine("The server is running at port "+SrvPort+"...");
                  Console.WriteLine("The local End point is  :" + myList.LocalEndpoint);
                  Console.WriteLine("Waiting for a connection.....");
  
  
                  while (true)
                  {
                      Socket s = myList.AcceptSocket();
                      Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
  
                      var b = new byte[100];
                      int k = s.Receive(b);
                      Console.WriteLine("Recieved...");
                      for (int i = 0; i &lt; k; i++)
                          Console.Write(Convert.ToChar(b[i]));
                      string cmd = Encoding.ASCII.GetString(b);
                      if (cmd.Contains("CLOSE-CONNECTION"))
                          break;
                      var asen = new ASCIIEncoding();
  
                      // sending text 
                      s.Send(asen.GetBytes("The string was received by the server."));
  
                      // the line bove to be modified to send serialized object?
  
  
                      Console.WriteLine("\nSent Acknowledgement");
                      s.Close();
                      Console.ReadLine();
                  }
                  /* clean up */
  
                  myList.Stop();
              }
          }
          catch (Exception e)
          {
              Console.WriteLine("Error..... " + e.StackTrace);
          }
      }
  </code></pre>
  
  <p>here is the client code that should return an object</p>
  
  <pre><code>public object runClient(string SrvIP, int SrvPort)
          {
              object obj = null;
              try
              {
                  var tcpclnt = new TcpClient();
                  Console.WriteLine("Connecting.....");
  
                  tcpclnt.Connect(SrvIP, SrvPort);
                  // use the ipaddress as in the server program
  
  
                  Console.WriteLine("Connected");
                  Console.Write("Enter the string to be transmitted : ");
  
                  var str = Console.ReadLine();
                  Stream stm = tcpclnt.GetStream();
  
                  var asen = new ASCIIEncoding();
                  if (str != null)
                  {
                      var ba = asen.GetBytes(str);
                      Console.WriteLine("Transmitting.....");
  
                      stm.Write(ba, 0, ba.Length);
                  }
  
                  var bb = new byte[2000];
  
                  var k = stm.Read(bb, 0, bb.Length);
  
                  string data = null;
  
                  for (var i = 0; i &lt; k; i++)
                      Console.Write(Convert.ToChar(bb[i]));
  
                  //convert to object code ??????
  
                  Console.ReadLine();
  
                  tcpclnt.Close();
              }
  
              catch (Exception e)
              {
                  Console.WriteLine("Error..... " + e.StackTrace);
              }
  
              return obj;
  
          }
  </code></pre>
  
  <p>I need to know a good serialize/serialize and how to integrate it into the solution above.</p>