I'm trying to send JSON-objects via Network Streams. I'm able to send one message and deserialize it but after reciving it my While loop exits. I think it has to do with NetworkStream.Read expecting fixed byte size encoding (ASCII), but I'm using UTF8 with varying byte sizes. Is there some way I can make NetworkStream.Read read the correct amount of bytes?
Function for sending data:
private void SendMessage(TcpClient client, string message)
{
stream = client.GetStream();
var data = new MessageModel
{
RequestType = "Message",
Name = clientName,
Date = DateTime.Now,
Message = message
};
string jsonString = JsonSerializer.Serialize(data);
byte[] jsonData = UTF8Encoding.UTF8.GetBytes(jsonString);
stream.Write(jsonData, 0, jsonData.Length);
}
}
Function for receiving data:
private void RecieveMessages(TcpClient client)
{
NetworkStream stream = client.GetStream();
byte[] data = new byte[1024];
int bytesRead;
while ((bytesRead = stream.Read(data, 0, data.Length)) > 0)
{
string jsonString = UTF8Encoding.UTF8.GetString(data, 0, bytesRead);
MessageModel message = JsonSerializer.Deserialize<MessageModel>(jsonString);
Console.WriteLine($"RequestType: {message?.RequestType}");
Console.WriteLine($"Name: {message?.Name}");
Console.WriteLine($"Date: {message?.Date}");
Console.WriteLine($"Message: {message?.Message}");
}
client.Close();
Console.WriteLine("Client disconnected.");
}
Solved: As Jon Skeet pointed out this had nothing to do with encoding. I accidently closed client stream when writing messages.