我可以使用Ubuntu从C ++套接字读取行吗?

时间:2014-11-12 01:30:12

标签: c++ sockets ubuntu

我想知道我是否可以使用Ubuntu从C ++套接字中读取几行?

请注意,每一行都用于不同的目的(例如,第一行可用作字符串,第二行可用作字符数组)。

即。我可以将这两条线直接放在一起而不会遇到任何问题吗?

read(socketFileDescriptor, buffer1, BUFFER_SIZE);
read(socketFileDescriptor, buffer2, BUFFER_SIZE);

提前致谢, 的问候,

1 个答案:

答案 0 :(得分:1)

您按顺序呼叫read两次,没有任何问题。

您从每次通话中获得的信息可能并不对应于单行输入。 read基本上就是" raw"读取,就像从磁盘上的文件读取时一样 - 如果数据可用,它将根据需要读取尽可能多的数据来填充您给出的缓冲区(达到您指定的大小)。

TCP将数据视为流,因此传递给write的两个(或多个)单独调用的数据最终可能会被放入单个数据包并一起传输。在接收端,所有数据都可以通过一次调用read来读取 - 或者,根据您传递的缓冲区大小,它可能只读取一部分,或者可能读取所有第一部分和部分数据等等。

如果要将输入读作" lines",您可以(例如)创建一个从套接字读取数据的流缓冲区,并创建一个iostream对象,该对象将该缓冲区中的数据解析为读行。这最初对许多人来说似乎很有吸引力(无论如何,这对我来说都是这样),但至少对我而言,从来没有很好地解决过。 Iostreams基本上假设一个同步协议,但套接字大多是异步的。尝试将套接字视为同步会导致更多问题而不是解决方案。