我正在使用运行 Linux 的 RedPitaya 开发板。该应用程序需要在板上运行的套接字服务器和在 Matlab 上运行的远程客户端之间进行通信。我正在使用的 C 服务器代码已经探测到可以与 Python 客户端一起使用,因此,我正在尝试使用我自己的修改来重新创建那个 Python 客户端,以使其符合我的需要。
我将四个数字作为数据传递,但只有一个数字将其发送到服务器。
系统使用 uint32 格式的数字,每个字节对系统都有不同的含义,我尝试更改 Matlab 客户端发送的数据类型,更改操作是同步还是异步类型,将其作为字符串发送,但只是发送的第一个数据似乎从服务器获得响应
这是接收数据的 C 服务器的一部分:
if(bind(sock_server, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
perror("bind");
return EXIT_FAILURE;
}
listen(sock_server, 1024);
printf("Listening on port serverPort ...\n");
while(1)
{
if((sock_client = accept(sock_server, NULL, NULL)) < 0)
{
perror("accept");
return EXIT_FAILURE;
}
while(1) //MSG_WAITALL
{
//sleep(1);
rx = recv(sock_client, (char *)&command, 4, MSG_DONTWAIT);
if (rx == 0) {
break;
measuring = 0;
}
if(rx > 0) {
value = command & 0xfffffff;
switch(command >> 28)
{
case 1: /* Trigger Delay - Timing */
timing = command & 0xff;
printf("timing: %zu \n",timing);
break;
case 2: /* NSAMPLES */
if ((command & 0xff) < 10)
nsamples = (command & 0xff);
else
nsamples = 10;
printf("samples: %zu \n",nsamples);
break;
case 3: /* NAVERAGES */
naverages = command & 0xff;
printf("averages: %zu \n",naverages);
break;
case 0: /* fire */
// set trigger and NSAMPLES set NAVERAGES and stop measurement
*((int32_t *)(cfg + 0)) = (STOP) + (timing<<8) + (nsamples<<16) + (naverages<<24);
//sleep(0.1); // wait 0.1 second
time_begin = clock();
// start measurement
*((int32_t *)(cfg + 0)) ^= 1;
measuring = 1;
break;
}
}
Python客户端以这种方式发送数据:
if self.idle: return
self.socket.write(struct.pack('<I', 1<<28 | self.cbTrigger.currentIndex()))
self.socket.write(struct.pack('<I', 2<<28 | self.cbNOS.currentIndex()))
self.socket.write(struct.pack('<I', 3<<28 | self.cbNOA.currentIndex()))
matlab 客户端相当简单:
t=tcpip('RedPitayaIP',serverPort,'NetworkRole','client')
pause(1);
fopen(t);
我正在以这种方式发送数据:
fwrite(t,variable_trigger_or,'uint32')
fwrite(t,variable_samples_or,'uint32')
fwrite(t,variable_average_or,'uint32')
Python 客户端发送数据,客户端给出以下响应:
Litening to port serverPort
timing: 16
samples: 10
averages: 0
而 Matlab 客户端只得到这个
Listening to port serverPort
timing: 16
因此,如果有人可以帮助我了解正在发生的事情,或者如果我遗漏了什么,我会很高兴,我对此并不陌生,但也不是专家