1

好吧,即使Embarcadero声明它不能保证返回准备好在套接字缓冲区中读取的字节的准确结果,但是如果你看一下,当你将 -1 放在 Socket.ReceiveBuf (这是 ReceiveLength 包装的内容)时,它会调用ioctlsocketFIONREAD 来确定网络输入缓冲区中可以从套接字 s 读取的待处理数据量

那么,它怎么不安全或不好呢?

例如:ioctlsocket(Socket.SocketHandle, FIONREAD, Longint(i));

4

1 回答 1

5

你提到的文件特别说(强调我的)

注意:对于流式套接字连接,不能保证 ReceiveLength 是准确的。

这意味着长度无法提前知道,因为它是由数据流提供的。显然,如果您不知道提前发送的数据有多大,您就无法正确设置客户端应该期望的长度。

将其视为复制文件的通用代码。如果您事先不知道要复制的文件有多大,则无法预测要复制的字节数。在套接字的情况下,提供套接字的流大小是事先不知道的(例如,对于实时生成和发送的数据),因此无法通知客户端套接字期望多少。

于 2013-03-20T23:54:46.383 回答