TCP-клиент отправляет сообщение только один раз и зацикливается - PullRequest
0 голосов
/ 11 июля 2019

Требование: я использую TCP-клиент, который будет связываться с внешним TCP-сервером.TCP-сервер не будет отправлять подтверждение о получении сообщения или нет.TCP-клиент должен отправлять сообщения периодически после определенной продолжительности.

У меня есть одно приложение (приложение GPS-менеджер), которое через каждые 5 секунд читает коммандос GPS и периодически публикует их через комаров.Я подписываюсь на эту тему в моем приложении TCP отправителя.При обратном вызове этого сообщения в приложении отправителя TCP мне необходимо отправить эти данные на TCP-сервер (внешний).TCP-сервер не будет отправлять сообщения для запроса данных GPS.

Я могу успешно подключиться к TCP-серверу.Также может отправлять данные на сервер, но только один раз.После отправки данных приложение TCP sender не получает никаких сообщений, отправленных приложением GPS manager.

    int32_t SendToServer(ServerClientCfg_t st_TmpServerClientCfg, char *c8_PacketData)
    {
        //int opt = 1;
        int sock = 0;
        // int sent=0;
        int valread;
        int byte=0;

        struct sockaddr_in serv_addr;
        //char *hello = "Hello from client";
        char buffer[1024] = {0};
        if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        {
            printf("\n Socket creation error \n");
            return -1;
        }

        //fcntl(sock, F_SETFL, O_NONBLOCK);

        memset(&serv_addr, '0', sizeof(serv_addr));

        serv_addr.sin_family = AF_INET;
        serv_addr.sin_port = htons(PORT);

        // Convert IPv4 and IPv6 addresses from text to binary form
        if(inet_pton(AF_INET, gst_DataSenderCfg.st_ServerClientCfg[0].pc8_HTTPServerURL, &serv_addr.sin_addr)<=0)
        {
            printf("\nInvalid address/ Address not supported \n");
            return -1;
        }

        if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
        {
            printf("\nConnection Failed \n");
            return -1;
        }

        while(1)
        {
            byte= send(sock , c8_PacketData , strlen(c8_PacketData) , 0 );
            printf("Bytes sent : %d\n",byte);
            printf("Count : %d  : Message sent from client :  %s\n\n",count,c8_PacketData);
            count++;
            sleep(1);
            break;              
        }
        return 0;
    }

Ожидаемый результат: TCP-сервер должен периодически получать данные GPS через 5 секунд.

Текущий результат: сервер получает данные только один раз.

...