我找不到这个答案:如果我从套接字4字节读取(我设置了4个字节的限制)会发生什么,但实际上有256bytes等待读取?它们会丢失还是等到下一次读取函数调用?从套接字读取少于可读取
1
A
回答
3
这取决于你使用什么样的插座。如果它是流套接字(由SOCK_STREAM创建),那么它支持一个数据流,并且甚至可以通过1个字节读取它(虽然效率不高),另一方面,您可能请求1024个字节但只获得1个字节。而这与发件人放入流中的部分几乎无关(存在依赖关系,但不应该依赖于此)。因此,对于流,您需要通过更高级别的协议来定义数据的结尾。您可以在末尾使用\ n发送字符串,或者使用以0结尾的字符串,或者在数据前发送一些字节大小的未来数据。
另一方面,如果您使用数据报协议(使用SOCK_DGRAM创建),您将通过数据包获取数据 - 无论发送者发送的数据量是多少。如果您提供的缓冲区小于可用数据,它将被截断,剩余数据将被丢弃。
6
如果它是一个TCP套接字,那么没有数据会丢失;它会排队。
请注意,您必须准备好处理部分读取操作,即获得的字节数少于请求的字节数,并且必须再次调用read()
才能获得更多。
相关问题
- 1. 从C读取套接字
- 2. 从TCP套接字读取
- 3. 从套接字读取
- 4. 从Java的套接字读取字节
- 5. SocketException当读取套接字
- 6. 无限读取套接字
- 7. 异步套接字读取
- 8. 可中断套接字读取Java
- 9. Java套接字BufferedReader读取不读
- 10. Android非阻塞从套接字读取
- 11. 从套接字读取C HTTP
- 12. 从C#中的套接字读取#
- 13. 从套接字的InputStream读取
- 14. 从扭曲的SSL套接字读取
- 15. Java - 从套接字通道读取
- 16. 读取数据从UDP套接字
- 17. 从套接字冻结读取
- 18. 从套接字读取原始数据
- 19. C写入和从套接字读取
- 20. 从套接字中迭代读取()
- 21. OrientDB - 无法从套接字读取
- 22. 部分从套接字读取
- 23. 无法从套接字中读取
- 24. 从套接字读取数据
- 25. Java套接字从套接字实时读取
- 26. Java套接字写入然后从套接字读取
- 27. 获取套接字中可读取的字节数
- 28. Bash连接少于符号从文件读取的字符串
- 29. 从套接字读取时获取空字符串
- 30. 是否从套接字读取等待或获取EOF?
我意识到这一点。然而,我所关心的是相反的情况:读数少于可用数量。 – nme 2013-03-02 23:44:31