C ++多UDP套接字数据处理

时间:2016-09-28 14:13:30

标签: c++ c sockets udp data-processing

我是c ++套接字编程的初学者,我有一个问题,我正试图处理一段时间。

我的任务是处理从两个不同传感器接收的数据。我通过UDP套接字接收数据然后处理数据包(显然所有这些都发生在while循环中)。我使用数据进行实时可视化,因此我需要整个过程快速。

只要我尝试从一个传感器接收数据,一切都会好的。当我想用两个传感器(因此在一个循环中有两个recvfrom()函数)时,这就是我的问题开始的时候。处理速度很慢,因此我错过了一些数据包。我知道recvfrom()函数是一个阻塞调用,我用select()函数处理它,因此我知道它不是问题的根源。

以下是代码中似乎负责的部分:

for i0=0:MAX
   cOR[0] = initial + move[i0];
       for i1=0:MAX
           cOR[1] = cOR[0] + move[i1];
                ....
                some other stuff inside the final loop

当我评论第二个SingleSocketReceiver()函数时,一切正常。

以下是SingleSocketReceiver()函数包含的内容:

 while (1)
{
    SingleSocketReceiver(&socket_1, port_1, scene_1, ptrScene_1, model);
    SingleSocketReceiver(&socket_2, port_2, scene_2, ptrScene_2, model);
 }

{

int SingleSocketReceiver(UDPsocket* socket, uint16_t port,pcl::PointCloud<pcl::PointXYZ> scene, pcl::PointCloud<pcl::PointXYZ>::Ptr ptrScene,  pcl::PointCloud<pcl::PointXYZ>::Ptr model)

}

如果有人建议真正的问题可能是什么以及处理它的可能方法,我将非常感激。不幸的是,我不能向你展示我的整个源代码,因为我为我的工作做了这件事,我不能公开展示它。

请原谅我在这个领域缺乏知识。我愿意回答所有其他问题。

2 个答案:

答案 0 :(得分:1)

不要分别为每个套接字调用select()。使用两个套接字设置一个选择,然后处理可用数据(来自一个或两个套接字)。

答案 1 :(得分:0)

select可以处理多个套接字,因此请使用这种方式。在单个循环上执行多个recvfrom是错误的。而是使用select来查找您拥有数据的套接字,并从remoteaddr参数中找出这些数据的来源。