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

标签 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 字节 block 的形式读取,并且您继续读取直到到达终点(根据您自己的定义)?

最佳答案

So basically, the input stream sent to the socket is read in 1024 byte chunks and you keep reading till you've hit an end point (by you're own definition)?

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

关于C# .Net 套接字缓冲区理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14518551/

相关文章:

c# - WPF 级联组合框到文本框

c# - Expression.Compile 与 Lambda 的性能,直接调用与虚拟调用

.net - 动态更改 Service Fabric 环境变量

.net - EventInfo.GetRaiseMethod() 始终为空

linux - 监视linux服务器套接字或文件

C++:为什么转换为指针然后取消引用有效?

c - 如何在不关闭套接字的情况下向主机发送 FIN 标志

c# - Msil 以动态类型发出静态数组

java - 什么是 android logcat 中的致命信号 6

c# - 错误地定义自定义类型?