目前,只要17字节,我就会收到数据。但是,我有两种类型的数据,17个字节和10个字节。当我有两种类型的数据时,如何进行处理?
byte[] message = new byte[17];
int bytesRead;
while (true)
{
bytesRead = 0;
try
{
//blocks until a client sends a message
bytesRead = clientStream.Read(message, 0, 17);
}
catch
{
//a socket error has occured
break;
}
if (bytesRead == 0)
{
//the client has disconnected from the server
break;
}
我已经看过类似的问题,但它在C中,我无法理解。请帮助我。
答案 0 :(得分:2)
您正尝试在基于流的协议(如TCP)之上实现消息交换。当消息具有不同的长度和/或类型时,有两种常见的方法
IMHO框架消息传递更容易实现,因为您始终知道要读取多少字节。对于自定界限消息,您必须使用缓冲和解析来检测消息的结束。此外,您必须确保消息结束标记不会出现在消息的有效负载中。
要实现成帧消息传递协议的接收方,您可以使用System.IO.BinaryReader
类。
ReadByte()
或其中一个ReadUInt*()
方法读取消息的长度Read(Byte[], Int32, Int32)
读取有效内容。 请注意,即使读取的字节数少于指定值,Read
也可能会返回。您必须使用循环来填充byte[] message
。