C#.Net套接字缓冲区了解

时间:2013-01-25 09:08:20

标签: c# .net sockets asynchronous tcp

我试图理解在套接字方案中使用缓冲区。以下是我的理解,如果有人能告诉我,我是否正确,或者对我可能误解的地方提出反馈意见。

使用MSDN example上详述的异步套接字(以下所有内容均参考该示例)

下面描述一个状态对象,我理解其中:

// 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字节的块读取的,你一直在阅读,直到你达到终点(按照你自己的定义)?

1 个答案:

答案 0 :(得分:3)

  

所以基本上,发送到套接字的输入流是以1024字节的块读取的,你一直在阅读,直到你达到终点(按照你自己的定义)?

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