Получение данных от C-Socket - PullRequest
       6

Получение данных от C-Socket

0 голосов
/ 28 октября 2019

Я очень новичок в программировании и особенно в программировании сокетов на C.

Я пытаюсь добиться запуска сервера сокетов (я писал на C) на Linux-машине (Ubuntu).

Эта серверная программа должна собирать данные с входного контакта и отметки времени (системное время) - это прекрасно работает.

Теперь я попытался отправить несколько кусков данных в буфер и прочитать всебуфер каждые несколько секунд в Matlab (data = fscanf (socket)).

В целях тестирования я использовал цикл for, который собирает 10.000 выборок данных, и мне удалось установить соединение в MatLab с сокетом.

Когда я пытаюсь прочитать буфер сокетов в MatLab, все, что я получаю, это первая итерация моего цикла (например: 0 0.04102564 1572266844676), хотя он печатает все 10.000 значений в консоли при запуске тестовой клиентской программы насам компьютер.

Так что, похоже, у меня проблемы с записью в буфер, и я пока не могу найти способ записи всех значений.

Надеюсь, вы, ребята,может помочь мне в достижении этой цели или дать мне указание о том, что делать для исследования, поскольку я пока не могу найти какие-либо решения в Интернете.

C-CODE-SOCKET-SERVER:

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <time.h> 
#include <sys/time.h>                               //Header for timestamp
#include "/usr/include/linux/stddef.h"              //Header for NULL
#include "/RedPitaya/api/include/redpitaya/rp.h"   //Header for RP API


//SOCKET SERVER
int main(int argc, char *argv[])
{
    // Variablen Deklaration
    int listenfd = 0, connfd = 0;   
    struct sockaddr_in serv_addr; 

    char sendBuff[1025];

    float value;                //Measured voltage value
    struct timeval tv;      //Timestamp

    // Initialization of API
    if (rp_Init() != RP_OK) {
        fprintf(stderr, "Red Pitaya API init failed!\n");
        return EXIT_FAILURE;
    }

    //Open a socket
    listenfd = socket(AF_INET, SOCK_STREAM, 0);     //Creates IPV4 TCP Socket
    memset(&serv_addr, '0', sizeof(serv_addr));
    memset(sendBuff, '0', sizeof(sendBuff)); 
    if (listenfd == -1) {                           //listenfd = 0 means socket opened successfully
        printf("Error: unable to open a socket\n");
        exit(1);
    }

    //Create an Adress
    serv_addr.sin_family = AF_INET;                         //Adresse nach IP-Protokoll V4 (IPV6 = AF_INET6)
    serv_addr.sin_addr.s_addr = htons(INADDR_ANY);         
    serv_addr.sin_port = htons(5000);                       //Port XXXX for Communication


    if ((bind(listenfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))) == -1) {
        printf("Error: unable to bind\n");
        printf("Error code: %d\n", errno);
        exit(1);
    }



    listen(listenfd, 10); 

    while(1)
    {
        connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); 

        if (connfd == -1) {
            printf("Error: unable to accept connections\n");
            printf("Error code: %d\n", errno);
            exit(1);
        }



        for(int i=0; i<10000;i++){

            //Get AI1-Value 
            rp_AIpinGetValue(1, &value);                //Read Voltage of Pin1

            //Get Timestamp
            gettimeofday(&tv, NULL);

            unsigned long long millisecondsSinceEpoch =
            (unsigned long long)(tv.tv_sec) * 1000 +
            (unsigned long long)(tv.tv_usec) / 1000;

                        //Ausgabe der Werte
            if(snprintf(sendBuff, sizeof(sendBuff), "%d %1.8f %llu\n", i, value, millisecondsSinceEpoch) < 0)  //schreibt Output in buffer "sendBuff"
            {
                printf("Input larger than buffersize");
                printf("Error code: %d\n", errno);
            }


            if (write(connfd, sendBuff, strlen(sendBuff)) == -1)    //Writing buffer to client (connfd)
            {
            printf("Error: Writing failed\n");
            printf("Error code: %d\n", errno);
            exit(1);
            }

        }

        close(connfd);
        usleep(1);   //Sleep in Millisekunden

     } 

    // Releasing resources
    rp_Release();
    return EXIT_SUCCESS;
}

MATLAB-CODE

%% Socket Communication TCP/IP
socket = tcpip('192.168.0.164', 5000, 'NetworkRole', 'client');

fopen(socket);

%% Read Data from socket
data = fscanf(socket)    %fscanf - ASCII / fread - binary / binclockread - binary-block

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...