Sending long XML over TCP <p>I'm sending an object (class name <code>House</code>) over TCP using the <code>TcpListener</code> on the server side in response to any message received from the <code>TcpClient</code>.</p> <p>When the message is received, it is currently populating a text box named <code>textBox1</code>.</p> <p>If I send a line of text, it works fine. You'll notice that I have a redundant line "Hello, I'm a server" for testing this purpose. But when I send the XML, it is cutting it off prematurely.</p> <p>When I send serialised XML in to the stream, I'm also receiving this error from the server side:</p> <blockquote> <p>Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.</p> </blockquote> <p><strong>Here's my server code</strong></p> <pre><code>// Set the variables for the TCP listener Int32 port = 14000; IPAddress ipaddress = IPAddress.Parse("132.147.160.198"); TcpListener houseServer = null; // Create IPEndpoint for connection IPEndPoint ipend = new IPEndPoint(ipaddress, port); // Set the server parameters houseServer = new TcpListener(port); // Start listening for clients connecting houseServer.Start(); // Buffer for reading the data received from the client Byte[] bytes = new Byte[256]; String data = "hello, this is a house"; // Show that the TCP Listener has been initialised Console.WriteLine("We have a TCP Listener, waiting for a connection..."); // Continuing loop looking for while (true) { // Create a house to send House houseToSendToClient = new House { house_id = 1, house_number = 13, street = "Barton Grange", house_town = "Lancaster", postcode = "LA1 2BP" }; // Get the object serialised var xmlSerializer = new XmlSerializer(typeof(House)); using (var memoryStream = new MemoryStream()) { xmlSerializer.Serialize(memoryStream, houseToSendToClient); } // Accept an incoming request from the client TcpClient client = houseServer.AcceptTcpClient(); // Show that there is a client connected //Console.WriteLine("Client connected!"); // Get the message that was sent by the server NetworkStream stream = client.GetStream(); // Blank int int i; // Loop for receiving the connection from the client // &gt;&gt;&gt; ERROR IS ON THIS LINE &lt;&lt;&lt; while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) { Console.WriteLine("here"); // Take bytes and convert to ASCII string data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); Console.WriteLine("Received s, return house"); // Convert the string to a byte array, ready for sending Byte[] dataToSend = System.Text.Encoding.ASCII.GetBytes("Hello, I'm a server"); // Send the data back to the client //stream.Write(dataToSend, 0, dataToSend.Length); // Send serialised XML in to the stream xmlSerializer.Serialize(stream, houseToSendToClient); } // Close the connection client.Close(); } </code></pre> <p><strong>Client code</strong></p> <pre><code>// Get the object serialised var xmlSerializer = new XmlSerializer(typeof(House)); // Set the variables for the TCP client Int32 port = 14000; IPAddress ipaddress = IPAddress.Parse("127.0.0.1"); IPEndPoint ipend = new IPEndPoint(ipaddress, port); string message = "s"; try { // Create TCPCLient //TcpClient client = new TcpClient("localhost", port); TcpClient client = new TcpClient(); // Convert the string to a byte array, ready for sending Byte[] dataToSend = System.Text.Encoding.ASCII.GetBytes(message); // Connect using TcpClient client.Connect(ipaddress, port); // Client stream for reading and writing to server NetworkStream stream = client.GetStream(); // Send the data to the TCP Server stream.Write(dataToSend, 0, dataToSend.Length); //xmlSerializer.Serialize(stream, houseToSend); // Buffer to store response Byte[] responseBytes = new Byte[256]; string responseData = String.Empty; // Read the response back from the server Int32 bytes = stream.Read(responseBytes, 0, responseBytes.Length); responseData = System.Text.Encoding.ASCII.GetString(responseBytes, 0, bytes); textBox1.Text = responseData; // Close the stream and the client connection stream.Close(); client.Close(); } catch (SocketException e) { MessageBox.Show(e.ToString()); } catch (Exception e) { MessageBox.Show(e.ToString()); } </code></pre> <p>I've marked on the code where the error is appearing.</p> <p>Is it because the message is too long?</p>