在套接字中接收数据时处理未知字节大小
本文关键字:未知 处理 字节 数据 套接字 | 更新日期: 2023-09-27 18:09:18
下面的代码是使用套接字接收数据。
这里的问题是字节大小应该初始化为预期的数量,否则数据将不会有预期的结果。
try
{
byte[] byt = new byte[256]; // Byte size should be intialize as expected
clientSocket.ReceiveTimeout = 10000;
clientSocket.Receive(byt);
String msg = Encoding.UTF8.GetString(byt);
Console.WriteLine("Message" + msg);
}catch (SocketException e){
if (e.SocketErrorCode == SocketError.TimedOut){
Console.WriteLine("SocketException: Timeout");
}else{
Console.WriteLine("SocketException: " + e.ToString());
}
}catch (Exception e){
Console.WriteLine("Exception: " + e.ToString());
}
所以我怎么可能处理一个未知大小的字节接收数据时?
如果您可以控制发送者。你可以在前4个字节传递包的大小并将其转换为int
接收时,可以使用
byte[] buffer = new byte[4];
ClientSocket.Receive(buffer);
int length = BitConverter.ToInt32(buffer, 0);
buffer = new byte[length];
ClientSocket.Receive(buffer);
如果要发送,请在包的开头添加大小
BitConverter.GetBytes(buffer.Length)