【发布时间】:2012-10-10 15:38:01
【问题描述】:
关于 .NET 套接字实现我有几点意见,所以我将依次说明它们:
- 我的理解是,Socket 的实例在其内部类实现中有一个可变大小的缓冲区,实际上是一个字节队列,并且与您在应用程序中声明和定义的应用程序缓冲区不同。
- 在使用socket type:
stream和protocol type:tcp的同步模式下,当使用Receive方法(阻塞进程)时,带参数的application byte buffer实际上是以chunks的形式出列socket buffer与您在应用程序中声明和定义的应用程序字节缓冲区大小相同,然后将此块分配给您发送到Receive函数的应用程序字节缓冲区。 - 如果上述情况属实,那么当字节缓冲区的长度大于套接字队列中的字节元素时会发生什么?
- 此外,如果 2 正确,则套接字的
Send方法将数据发送到端点连接的主机套接字缓冲区而不是应用程序缓冲区。 - 最后,由于 Socket 方法
Accept是非阻塞的,因此在底层实现中为它创建了一个线程,并且它有一个自己的队列,当调用Accept方法时它会出队。
我要求所有这些检查我到目前为止的理解是否正确,或者它是否大部分是错误的并且需要更正。
【问题讨论】:
-
#5 很难理解你在问什么。
-
我在问我的理解是否有缺陷,或者我实际上与那些创建我用来了解 .net 套接字的参考资料的人处于同一页面。
-
我不知道 .NET,但如果 (1) 是正确的,我会感到惊讶。套接字龙舌兰发送和接收缓冲区是可以的,但是在内核中,因此类中不需要另一个。
-
@EJP 我认为(不确定,因为我还是个新手)winsock API 函数调用被定向到正在运行的 Windows 网络服务。这方面还有很多东西要学。
-
不,它们被定向到包含我提到的缓冲区的内核组件。
标签: c# .net sockets tcp stream