用c++向远程rsyslog发送消息
send a message to a remote rsyslog in c++
是否有办法在c++代码中发送消息到远程syslog ?
相当于Linux中的这行命令:
nc -w0 -u 192.168.1.1 514 <<< "logging from remote"
这段代码应该用套接字做一些事情,但它没有工作。
int main(int argc, char *argv[])
{
int listenfd = 0, connfd = 0,n;
struct sockaddr_in serv_addr;
struct hostent *server;
char sendBuff[1025];
sprintf(sendBuff,"bla bla");
time_t ticks;
listenfd = socket(AF_INET, SOCK_DGRAM , 0);
memset(&serv_addr, '0', sizeof(serv_addr));
memset(sendBuff, '0', sizeof(sendBuff));
serv_addr.sin_family = AF_INET;
server = gethostbyname("192.168.1.108");
bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
//serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(514);
if ((n=connect(connfd,(const sockaddr*)&serv_addr,sizeof(serv_addr))) < 0){
printf(" Connection to has failed Server ");
}
bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(listenfd, 10);
while(1)
{
connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
write(connfd, sendBuff, strlen(sendBuff));
close(connfd);
sleep(60);
}
}
在一些unix(包括Linux)上,您可以简单地使用客户机命令http://linux.die.net/man/3/syslog并安装当前的syslog服务器,例如syslog-ng。该服务器不仅可以根据您的规则过滤消息,还可以将它们发送到任何远程syslog。
如果你是在Windows上,恐怕你必须实现你自己的syslog协议。幸运的是,它没有那么难,或多或少地定义了。
nc -u
仅通过UDP套接字发送数据。没有什么特别的,没有特定的协议要遵循:它只是原始数据。你可以简单地在c++中通过UDP套接字发送消息(参见socket
与AF_INET, SOCK_DGRAM
参数和其他相关函数)。
但是这意味着你错过了很多syslog的特性,比如设施和优先级。
@Moose是正确的:syslog
API更符合你的需求,因为它更灵活(如果你想改变行为,不需要修改你的程序,你只需要重新配置syslog守护进程)。
相关文章:
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- C++秘密消息学校作业
- glad 导致 glfwSwapBuffers 返回错误消息
- C++入门 5 版:类消息和文件夹
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 重新定义预定义的 errno 错误消息 (E2BIG)
- 正在读取RSysLog tcp消息
- 用c++向远程rsyslog发送消息