c# - Socket 接收数据时处理未知字节大小

标签 c# sockets

下面的代码是使用套接字接收数据。

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

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)

关于c# - Socket 接收数据时处理未知字节大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39765305/

相关文章:

c# - C# 应用程序中的 SerialPort 问题

c# - 使用变量访问 WPF 元素

c# - 将黑白位图转换为 boolean 数组

c# - 将文件内容导入数据库的最快且最佳的方法

c - 使用 C 套接字发送 HTTP 响应

c# - 如何将 XElement 的值包装在 ![CDATA[***]] 中?

c++ - linux套接字接收离开

javascript - 带有 socket.io 的 Nodejs 集群失去连接

python - 更改已运行的服务器的套接字端口(python)

linux - 何时对客户端-服务器 IPC 使用基于 Fifo 的套接字?