读取数据使用读取功能
问题描述:
我试图使用数据下面的代码从套接字读取:读取数据使用读取功能
n = read(fd, buffer, 50000);
的问题是:当从网络服务器中的数据比TCP封装尺寸较大,这些数据将被分成多个包。在这种情况下,read函数只是从fd读取一个数据包,或者它会读取fd中的所有包?
请注意,读取函数只被调用一次。
答
由于您使用的是TCP,因此您的套接字类型为SOCK_STREAM
。 A SOCK_STREAM
套接字是一个字节流,并且不维护数据包边界,因此如果接收到多个数据包并且缓冲区中有足够空间,对read()
或recv()
的调用将读取来自多个数据包的数据。如果缓冲区的大小不足以容纳所有数据,它也可能从数据包的一部分返回数据。下一个read()
将继续读取下一个字节。
答
功能read
接收最大字节指定计数,在你的榜样50000
当函数返回read
,您需要检查返回值。写入缓冲区的实际字节数在变量n
中。
你用什么语言编程? – 2011-02-25 15:24:21
我的编程语言是C++ – cheng 2011-02-25 15:28:59