提问人:Martin Wiklund 提问时间:11/3/2023 最后编辑:Martin Wiklund 更新时间:11/5/2023 访问量:26
读取具有 UTF8 编码的 NetworkStream
Read NetworkStream with UTF8 Encoding
问:
我正在尝试通过网络流发送JSON对象。我能够发送一条消息并反序列化它,但在接收它后,我的 While 循环退出。我认为这与 NetworkStream.Read 期望固定字节大小编码 (ASCII) 有关,但我使用的是具有不同字节大小的 UTF8。 有没有办法让NetworkStream.Read读取正确的字节数?
发送数据的功能:
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);
}
}
接收数据的功能:
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.");
}
解决:正如 Jon Skeet 所指出的,这与编码无关。我在写消息时不小心关闭了客户端流。
答: 暂无答案
评论
stream.Read