title: Sending Binary File TcpClient - File Is Larger Than Source
body: <p>To put my toe in the water of Network programming, I wrote a little Console App to send a png file to a server (another console app). The file being written by the server is slightly bigger than the source png file. And it will not open.</p>
  
  <p>The code for the client app is:</p>
  
  <pre><code>    private static void SendFile()
      {
          using (TcpClient tcpClient = new TcpClient("localhost", 6576))
          {
              using (NetworkStream networkStream = tcpClient.GetStream())
              {
                  //FileStream fileStream = File.Open(@"E:\carry on baggage.PNG", FileMode.Open);
  
                  byte[] dataToSend = File.ReadAllBytes(@"E:\carry on baggage.PNG");
  
                  networkStream.Write(dataToSend, 0, dataToSend.Length);
                  networkStream.Flush();
  
              }
          }
  
      }
  </code></pre>
  
  <p>The code for the Server app is :</p>
  
  <pre><code>    private static void Main(string[] args)
      {
          Thread thread = new Thread(new ThreadStart(Listen));
          thread.Start();
  
          Console.WriteLine("Listening...");
          Console.ReadLine();
      }
  
      private static void Listen()
      {
          IPAddress localAddress = IPAddress.Parse("127.0.0.1");
          int port = 6576;
          TcpListener tcpListener = new TcpListener(localAddress, port);
          tcpListener.Start();
  
          using (TcpClient tcpClient = tcpListener.AcceptTcpClient())
          {
              using (NetworkStream networkStream = tcpClient.GetStream())
              {
                  using (Stream stream = new FileStream(@"D:\carry on baggage.PNG", FileMode.Create, FileAccess.ReadWrite))
                  {
                      // Buffer for reading data
                      Byte[] bytes = new Byte[1024];
                      var data = new List&lt;byte&gt;();
  
                      int length;
  
                      while ((length = networkStream.Read(bytes, 0, bytes.Length)) != 0)
                      {
                          var copy = new byte[length];
                          Array.Copy(bytes, 0, copy, 0, length);
                          data.AddRange(copy);
                      }
  
                      BinaryFormatter binaryFormatter = new BinaryFormatter();
                      stream.Position = 0;
                      binaryFormatter.Serialize(stream, data.ToArray());
                  }
              }
  
          }
          tcpListener.Stop();
  </code></pre>
  
  <p>The size of the written file is 24,103Kb, whereas the source file is only 24,079Kb.</p>
  
  <p>Is it apparent to anyone why this operation is failing?</p>
  
  <p>Cheers</p>