C++ c套接字多个读取调用
我正在写3200个浮点数,如下所示:C++ c套接字多个读取调用,c++,c,sockets,tcp,C++,C,Sockets,Tcp,我正在写3200个浮点数,如下所示: float fft[3200] = {0}; get_fft_frame(dev, fft, 3200); // rf sensor int written = write(sd, fft, sizeof(fft)); 然后像这样读: float *fft = new float[3200]; int inRead = 0; while (inRead < (3200*4)) { //sleep(1); int bytesRead =
float fft[3200] = {0};
get_fft_frame(dev, fft, 3200); // rf sensor
int written = write(sd, fft, sizeof(fft));
然后像这样读:
float *fft = new float[3200];
int inRead = 0;
while (inRead < (3200*4)) {
//sleep(1);
int bytesRead = read(sd, fft + inRead, (3200*4) - inRead);
inRead += bytesRead;
}
所有数据都在一次写入中写入,但需要两次读取调用才能获得所有数据。第一次读取返回11584,第二次读取返回1216
问题是第二个read调用只读取零。但是,如果我取消对sleep调用的注释,它将读取所有正确的数据
有没有更好的方法在不睡觉的情况下获取数据?你把偏移量弄混了。inRead以字节为单位,但当您将其添加到fft时,它将乘以sizeof float,再乘以指针算术规则。读取调用中的偏移量表达式应为
((char*)fft)+inRead
您必须使用套接字,还是可以使用其他形式的流程通信?管道可能是您正在寻找的,因为它们会堵塞。您需要向我们展示如何设置插座。也就是说,提供一个。但对于初学者,您需要检查read的返回值。read可以在出错时返回-1,在这种情况下,您不应该将其添加到read中。如果实现正确,则多个读取调用应该没有问题。因此,我们需要看到完整的代码。是的,我已经深入到该项目中,以重新考虑这样的因素