使用读取功能从套接字读取数据

时间:2011-02-25 15:15:52

标签: c++ sockets tcp

我正在尝试使用套接字中的以下代码读取数据:

n = read(fd, buffer, 50000);

问题是:当来自Web服务器的数据大于tcp包大小时,这些数据将被拆分为多个包。在这种情况下,读取函数只是从fd读取一个数据包,还是会读取fd中的所有包?

请注意,只读一次read函数。

2 个答案:

答案 0 :(得分:4)

因为您使用的是TCP,所以套接字的类型为SOCK_STREAMSOCK_STREAM套接字是一个字节流,不保持数据包边界,因此,如果收到多个数据包,则read()recv()的调用将读取来自多个数据包的数据。缓冲区中有足够的空间。如果缓冲区的大小不足以容纳所有数据,它也可能从数据包的一部分返回数据。下一个read()将继续读取下一个字节。

答案 1 :(得分:0)

函数read最多接收指定的字节数,在您的示例50000中。

当函数read返回时,您需要检查返回值。写入缓冲区的实际字节数在变量n中。