C# sockets (tcp/ip) i niewyjaśnione 'gubienie' ostatnich znaków tekstu

0

Witam,
przygotowałem sobie bardzo prostą aplikację klient/serwer, gdzie przy pomocy klienta chcę wysłać zwykły kod html w postaci stringa. Robię to w ten sposób:

 
    //klient
    static void SendMsg(TcpClient client, string tcpPackage)
    {
        using (NetworkStream stream = client.GetStream())
        {
             stream.Write(Encoding.UTF8.GetBytes(tcpPackage), 0, tcpPackage.Length); //potrzebuję mieć utf8, bo w htmlu przesyłam polskie znaki
        }
    }
        //serwer
        void ProcessIncomingData(object obj)
        {
            TcpClient client = (TcpClient)obj;

            string tcpPackage = string.Empty;

            using (NetworkStream stream = client.GetStream())
            {
                if (stream.CanRead)
                {
                    byte[] readBuffer = new byte[client.ReceiveBufferSize];
                    
                    using (var writer = new MemoryStream())
                    {
                        do
                        {
                            int numberOfBytesRead = stream.Read(readBuffer, 0, readBuffer.Length);

                            if (numberOfBytesRead <= 0)
                            {
                                break;
                            }
                            writer.Write(readBuffer, 0, numberOfBytesRead);
                        } while (stream.DataAvailable);
                        
                        tcpPackage= Encoding.UTF8.GetString(writer.ToArray());
                        
                        Console.WriteLine(tcpPackage);
                    }
                }
        }

Html jaki odbieram na serwerze to w 95% przypadków coś takiego:
<html><body> ... </body></html - czyli brakuje ostatniego znaku. Ale zauważyłem również takie takie przypadki:
<html><body> ... </body></htm
<html><body> ... </body></
innych danych wyjściowych nie zaobserwowałem..

Teraz pytanie brzmi - dlaczego tak się dzieje i jak skutecznie to rozwiązać (czyli odebrać w całości to, co zostało wysłane..) ?

pzdr,
agawa

0

'Strzał w 10tke!', tzn. wygląda na to, że to było problemem (teraz wydaje się być to oczywiste :). Do zamknięcia .)

1 użytkowników online, w tym zalogowanych: 0, gości: 1