2

我试图了解在事物的套接字方案中使用缓冲区。这是我的理解,如果有人能告诉我我是否正确或反馈我可能误解的地方,那就太好了。

使用 MSDN示例中详细介绍的异步套接字(以下所有内容均参考该示例)

下面描述了一个我理解的状态对象:

// State object for reading client data asynchronously
public class StateObject
{
    // Client  socket.
    public Socket workSocket = null;
    // Size of receive buffer.
    public const int BufferSize = 1024;
    // Receive buffer.
    public byte[] buffer = new byte[BufferSize];
    // Received data string.
    public StringBuilder sb = new StringBuilder();
}

现在它说缓冲区是 1024 字节。当您接收数据时,您一次只要求 1024 个字节?在异步方法 ReceiveCallback 中,它只要求 1024,然后说这可能不是所有数据,所以现在检索下一个 1024。

所以基本上,发送到套接字的输入流以 1024 字节块的形式读取,并且您一直读取直到到达终点(根据您自己的定义)?

4

1 回答 1

3

所以基本上,发送到套接字的输入流以 1024 字节块的形式读取,并且您一直读取直到到达终点(根据您自己的定义)?

正确的。由于 TCP 只是一个数据流,因此如果您的消息在流中,则实际上无法知道每个数据的长度(除非您始终具有固定长度)。因此,您需要使用某种缓冲区从流中读取,以便能够检测到消息的结尾。

于 2013-01-25T10:44:42.247 回答