我通过TCP从LabVIEW向这个C程序每秒发送一些8位灰度帧(160x120)。我设法将字节转换为uint8_t像素值。这里的目标是我将每个19203字节定义为一个图像数组,其中第一个字节是定义数组ID的头,第二个和第三个字节定义分辨率(120和160),最后19200个字节是从LabVIEW程序接收的字节数。目的是第一个数组的第一个字节将获得值“1”,第二个数组的第一个字节将获得值“2”,依此类推。
问题在于我认为数组总是一次又一次地重复捕获的第一帧,因为在几秒的传输时间后,LabVIEW的帧速率会有很大的下降。阵列是否重复首次捕获的19000字节?。
#define DEFAULT_BUFLEN 19203
int main(int argc , char *argv[])
{
WSADATA wsa;
SOCKET s , new_socket;
struct sockaddr_in server , client;
int c;
int iResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
unsigned int i;
uint8_t picture[19203];
uint8_t* p;
int x=0;
int z=0;
p = (uint8_t*)recvbuf;
do
{
iResult = recv( new_socket, recvbuf, recvbuflen, 0);
for(z=1; z<11; z++)
{
picture[0] = z;
for(i=0, x=1; i<19202 && x<19203; i++, x++)
{
picture[x] = p[i];
printf("%d\n",picture[x]);
}
}
}
while(iResult > 0 );
closesocket(new_socket);
WSACleanup();
return 0;
}