我试图理解在套接字方案中使用缓冲区。以下是我的理解,如果有人能告诉我,我是否正确,或者对我可能误解的地方提出反馈意见。
使用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字节的块读取的,你一直在阅读,直到你达到终点(按照你自己的定义)?
答案 0 :(得分:3)
所以基本上,发送到套接字的输入流是以1024字节的块读取的,你一直在阅读,直到你达到终点(按照你自己的定义)?
正确。由于TCP只是一个数据流,因此如果您在流中的消息(除非您始终具有固定长度),实际上无法知道每个数据的长度。因此,您需要使用某种缓冲区从流中读取,以便能够检测到消息的结束。