如何确保从tcp / ip套接字获取最新数据?

时间:2016-08-20 02:29:04

标签: c++ sockets ubuntu tcp boost-asio

所以我正在使用通过以太网线连接到计算机的摄像头,显然,必须作为tcp / ip流套接字进行访问。

基本上,我想要每1秒拍摄一张照片。我注意到相机的输入数据不断进入,而我想要的只是从相机中获取最新数据而不是其他内容,即当时只有最新的图像。

到目前为止我读到的是我需要多次读取输入数据,直到我达到最新数据为止。这真的是唯一的方法吗?我真的不喜欢一个过程一直忙着的想法,只是为了扔掉'来自流套接字的传入数据。

理论上,我不能减少输入缓冲区大小'来自套接字的输入,以便我只能收到一张图片的数据?然后,每一个进一步的即将到来的数据都会被浪费掉,所以当输入缓冲区被刷新一次后,就会充满最新的数据或类似的东西。 (我的意思是,必须对来自流的输入数据可以“堆积”等待处理/读取的数量有一些限制,对吗?当达到该限制时会发生什么?进一步的数据是否会得到扔掉或者用新数据覆盖“缓冲区”?)

这甚至可能吗?我是一个完全的初学者,所以我只是理论化。如果这样的事情是可能的,任何人都可以展示如何编码的大纲吗? (我必须在Ubuntu上使用boost asio库来获取这些东西) 那会非常有用!

1 个答案:

答案 0 :(得分:1)

是的,这是唯一的方法。

使用TCP的全部原因是它是一个“可靠”的协议,保证交付。与UDP相反。

TCP的工作是按发送顺序将数据传送到接收方,而不会丢失任何内容。如果无法传递数据,那么在TCP放弃的某个时刻连接会中断。但是,只要有活动连接,接收方就会获得发送方发送的所有内容。

如果您不想获得发件人获得的某些数据,您必须与发件人做出任何适当的安排,以便实现这一点。 TCP不会丢弃数据,只是因为接收者不想要它。