要求:我正在使用将与外部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数据。
当前结果:服务器仅接收一次数据。