我是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)
}
如果有人建议真正的问题可能是什么以及处理它的可能方法,我将非常感激。不幸的是,我不能向你展示我的整个源代码,因为我为我的工作做了这件事,我不能公开展示它。
请原谅我在这个领域缺乏知识。我愿意回答所有其他问题。
答案 0 :(得分:1)
不要分别为每个套接字调用select()。使用两个套接字设置一个选择,然后处理可用数据(来自一个或两个套接字)。
答案 1 :(得分:0)
select
可以处理多个套接字,因此请使用这种方式。在单个循环上执行多个recvfrom
是错误的。而是使用select来查找您拥有数据的套接字,并从remoteaddr参数中找出这些数据的来源。