Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c套接字多个读取调用_C++_C_Sockets_Tcp - Fatal编程技术网

C++ c套接字多个读取调用

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 =

我正在写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 = read(sd, fft + inRead, (3200*4) - inRead);
    inRead += bytesRead;
}
所有数据都在一次写入中写入,但需要两次读取调用才能获得所有数据。第一次读取返回11584,第二次读取返回1216

问题是第二个read调用只读取零。但是,如果我取消对sleep调用的注释,它将读取所有正确的数据


有没有更好的方法在不睡觉的情况下获取数据?

你把偏移量弄混了。inRead以字节为单位,但当您将其添加到fft时,它将乘以sizeof float,再乘以指针算术规则。读取调用中的偏移量表达式应为

((char*)fft)+inRead

您必须使用套接字,还是可以使用其他形式的流程通信?管道可能是您正在寻找的,因为它们会堵塞。您需要向我们展示如何设置插座。也就是说,提供一个。但对于初学者,您需要检查read的返回值。read可以在出错时返回-1,在这种情况下,您不应该将其添加到read中。如果实现正确,则多个读取调用应该没有问题。因此,我们需要看到完整的代码。是的,我已经深入到该项目中,以重新考虑这样的因素