Как отправить данные из приложения C ++ в Matlab через UDP и построить их - PullRequest
1 голос
/ 05 июля 2019

Я хочу отправить данные через 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 чисел и закрывается. Я хочу, чтобы это было как одно полученное число за одно выполнение цикла.

...