作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,甚至Embarcadero声明不能保证返回套接字缓冲区中准备读取的字节的准确结果,但是如果您查看它,当您将 -1 放在 Socket.ReceiveBuf (这是 ReceiveLength 包装的)时,它会调用 ioctlsocket 与 FIONREAD 确定可以从套接字 s 读取的网络输入缓冲区中待处理的数据量。
那么,它怎么会不安全或不好呢?
例如:ioctlsocket(Socket.SocketHandle, FIONREAD, Longint(i));
最佳答案
您特别提到的文档说(强调我的)
Note: ReceiveLength is not guaranteed to be accurate for streaming socket connections.
这意味着长度无法提前得知,因为它是由数据流提供的。显然,如果您不知道提前发送的数据有多大,则无法正确设置客户端应该期望的长度。
将其视为复制文件的通用代码。如果您事先不知道要复制的文件有多大,则无法预测要复制的字节数。对于套接字,提前不知道提供套接字的流大小(例如,实时生成并发送的数据),因此无法通知客户端套接字期望有多少。
关于delphi - 为什么使用 Socket.ReceiveLength 不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15536772/
好吧,甚至Embarcadero声明不能保证返回套接字缓冲区中准备读取的字节的准确结果,但是如果您查看它,当您将 -1 放在 Socket.ReceiveBuf (这是 ReceiveLength 包
我是一名优秀的程序员,十分优秀!