应用场景:
在嵌入式开发中常常遇到存储空间不足的情况,没有办法存储大量的程序运行信息,遇到故障,通常不能简单的重启设备,需要保留故障现场,但是缺乏有效的程序运行数据,就无法快速定位问题。
解决方法:
如果设备有网卡,可以将udp发送客户端封装为一个函数,把程序日志信息发送到另一台设备进行存储,或在线分析。
如果想进一步提高效率,可以增加一个udp服务端,用于接收指令,控制udp发送的信息的等级、内容等。
代码:
#include <iostream>
#include <cstring>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <unistd.h>
void sendMessage(const std::string& message, const std::string& server_ip, int server_port) {
int sockfd;
struct sockaddr_in server_addr;
// 创建Socket
if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
std::cerr << "Error: Unable to create socket." << std::endl;
return;
}
// 设置服务器地址和端口
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(server_port);
if (inet_pton(AF_INET, server_ip.c_str(), &server_addr.sin_addr) <= 0) {
std::cerr << "Error: Invalid server IP address." << std::endl;
close(sockfd);
return;
}
// 发送消息
if (sendto(sockfd, message.c_str(), message.size(), 0, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
std::cerr << "Error: Unable to send message." << std::endl;
} else {
std::cout << "Message sent successfully." << std::endl;
}
// 关闭Socket
close(sockfd);
}
int main() {
std::string message = "hello world !!!";
std::string server_ip = "239.0.0.1"; // 替换为实际的服务器 IP 地址
int server_port = 12345; // 替换为实际的服务器端口号
sendMessage(message, server_ip, server_port);
return 0;
}
1321

被折叠的 条评论
为什么被折叠?



