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