c - TCP客户端只发送一次消息并陷入循环
问题描述
要求:我正在使用将与外部 TCP 服务器通信的 TCP 客户端。TCP 服务器不会发送任何关于是否收到消息的确认。TCP客户端必须在一定时间后定期发送消息。
我有一个应用程序(GPS 管理器应用程序),它每 5 秒后定期读取 GPS 坐标并通过 mosquitto 发布。我在我的 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 数据。
当前结果:服务器仅接收一次数据。
解决方案
推荐阅读
- visual-studio-code - 当 VSCode 发生运行时错误时,有没有办法显示错误的代码行而不是内存地址?
- sql - Auto Increment FK 如何更新?
- json - 如何验证 json 中的每个元素是否与模式一致
- javascript - 按钮在我的 HTML 的某些部分不起作用
- julia - 在 Julia 1.0 中提高 for 循环速度
- reactjs - 上下文 API:使用上下文状态中的函数来更改上下文变量。函数未执行
- java - 构造函数 Teacher(Teacher) 未定义
- arm - STM32L0 在设置 NVIC/GPIO 时冻结
- spring-boot - 显示 unicode 字符
- python - gridSearch 性能测量效果