我在 winsock 中使用非阻塞套接字,我想知道我是否可以部分接收数据?
我的数据包包含一个“长度”字,我必须先读取它,然后根据“长度”读取整个数据包。
实际上这个问题就像“recv() 是如何工作和结束的?”,我可以使用 recv() 直到我获得所有数据吗?
最佳答案
这取决于套接字的类型。如果它是一个数据报套接字,recv
将恰好读取一个完整的数据报。如果是 TCP 套接字:
recv
会在返回前读取至少一个字节recv
可以读取多个完整的message
如果你使用的是 TCP,你可能会想做这样的事情:
- 至少读取组成长度的字节
- 读取
length
个字节 - 您现在有一条完整的消息
- 冲洗,重复
您可以从 readn
function 开始.
关于c++ - 用 recv() 接收部分数据,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10690814/