在套接字中接收数据时处理未知字节大小

本文关键字:未知 处理 字节 数据 套接字 | 更新日期: 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)