定时发送心跳包用C++代码举例
时间: 2023-07-11 16:53:24 浏览: 155
下面是一个简单的 C++ 代码示例,用于定时发送心跳包:
```cpp
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <ctime>
using namespace std;
#define SERVER_IP "192.168.1.1" // 服务器的 IP 地址
#define SERVER_PORT 8888 // 服务器的端口号
#define HEARTBEAT_INTERVAL 10 // 心跳包发送间隔,单位为秒
int main()
{
// 创建 socket
int sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0)
{
perror("socket");
exit(1);
}
// 设置服务器地址
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
// 定时发送心跳包
while (true)
{
// 构建心跳包数据
time_t now = time(NULL);
char data[1024];
sprintf(data, "Heartbeat at %s", ctime(&now));
// 发送心跳包
int ret = sendto(sock, data, strlen(data), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));
if (ret < 0)
{
perror("sendto");
break;
}
// 等待一段时间后再次发送心跳包
sleep(HEARTBEAT_INTERVAL);
}
// 关闭 socket
close(sock);
return 0;
}
```
在上面的代码中,我们使用 `socket` 函数创建了一个 UDP socket,并设置了服务器的 IP 地址和端口号。然后我们使用一个 while 循环,定时发送心跳包。在每次循环中,我们构建心跳包数据并使用 `sendto` 函数发送。最后,我们等待一段时间后再次发送心跳包,这里使用 `sleep` 函数实现。在发送过程中,如果出现错误,我们会输出错误信息并退出循环。最后,我们使用 `close` 函数关闭 socket。
阅读全文