Я хочу отправить данные через UDP с помощью Winsock из моего приложения на C ++ в Matlab и отобразить числа в реальном времени.
Например:
Я получил числа от 1 до 10, я хочу отправить 1 из C ++, получить его в Matlab, поместить его на фигуру (график, столбик, что угодно), затем отправить номер 2, получить его, поставить его на рисунок и так далее.
Теперь я могу отправлять и получать только полные 10 номеров одновременно и строить их после того, как получу их.
Можно ли отправлять отдельные числа в виде отдельных дейтаграмм и получать их отдельно?
В C ++ я инициализирую winsock, создаю сокет, заполняю данные сокета, связываю сокет и отправляю в цикле:
while (i<10)
{
error_code = sendto(sock, (const char*)&i, 2, 0, (SOCKADDR*)&sockaddr, sizeof(sockaddr));
if(error_code == SOCKET_ERROR)
{
printf("\nError code: %d\n", WSAGetLastError());
}
else
{
printf("\nMessage sent: %d", i);
i++;
}
}
Ведь я закрываю розетку.
В Matlab я создаю UDP-объект, открываю его и сканирую в цикле. Вся функция выглядит так:
UDPsock=udp('127.0.0.1', 'LocalPort', 7766, 'Timeout', 2);
set(UDPsock, 'DatagramTerminateMode','off');
figure();
fopen(UDPsock);
while length(data) < 10
disp('recieving')
data = fscanf(UDPsock);
data_num = double(data);
plot(data_num);
end
fclose(UDPsock);
В отладчике Matlab я вижу, что цикл while выполняется один раз, он собирает все 10 чисел и закрывается.
Я хочу, чтобы это было как одно полученное число за одно выполнение цикла.