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