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

时间:2016-09-29 08:34:05

标签: c# sockets

以下代码使用Socket接收数据。

这里的问题是字节大小应该初始化为预期的数量,否则数据将没有预期的结果。

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());

}

那么在接收数据时如何处理未知大小的字节?

1 个答案:

答案 0 :(得分:0)

如果您可以控制发件人。您可以在第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)