TCP客户端仅发送一次消息并陷入循环

时间:2019-07-11 05:09:36

标签: c sockets tcp client embedded-linux

要求:我正在使用将与外部TCP服务器通信的TCP客户端。 TCP服务器将不会发送有关是否收到消息的任何确认。 TCP客户端必须在一定时间后定期发送消息。

我有一个应用程序(GPS管理器应用程序),该应用程序每隔5秒钟会定期读取GPS坐标并通过蚊子发布一次。我正在我的TCP发送器APP中订阅该主题。在TCP发件人应用程序中对该消息的消息回调中,我需要将这些详细信息发送到TCP服务器(外部)。 TCP服务器不会发送任何消息来请求GPS数据。

我能够成功连接TCP服务器。也能够将数据发送到服务器,但只能发送一次。发送数据后,TCP发件人应用程序不会收到GPS管理器应用程序发送的任何消息。

    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服务器应在5秒钟后定期接收GPS数据。

当前结果:服务器仅接收一次数据。

0 个答案:

没有答案