Требование: я использую 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 секунд.
Текущий результат: сервер получает данные только один раз.