Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c+中向远程rsyslog发送消息+; 有没有方法在C++代码中向远程系统日志发送消息?< /P>_C++_Linux_Rsyslog - Fatal编程技术网

在c+中向远程rsyslog发送消息+; 有没有方法在C++代码中向远程系统日志发送消息?< /P>

在c+中向远程rsyslog发送消息+; 有没有方法在C++代码中向远程系统日志发送消息?< /P>,c++,linux,rsyslog,C++,Linux,Rsyslog,相当于linux命令中的这一行: nc -w0 -u 192.168.1.1 514 <<< "logging from remote" nc-w0-u 192.168.1.1 514在包括Linux在内的多个Unix上,您只需使用client命令并安装当前的syslog服务器,如syslog ng。此服务器不仅能够根据您的规则筛选消息,还可以将它们发送到任何远程系统日志 如果您使用的是Windows,恐怕您必须实现自己的系统日志协议。幸运的是,它并没有那么困难,而且或多或少

相当于linux命令中的这一行:

nc -w0 -u 192.168.1.1 514 <<< "logging from remote"

nc-w0-u 192.168.1.1 514在包括Linux在内的多个Unix上,您只需使用client命令并安装当前的syslog服务器,如syslog ng。此服务器不仅能够根据您的规则筛选消息,还可以将它们发送到任何远程系统日志


如果您使用的是Windows,恐怕您必须实现自己的系统日志协议。幸运的是,它并没有那么困难,而且或多或少都有定义。

nc-u
只是通过UDP套接字发送数据。它没有什么特别之处,也没有具体的协议可遵循:它只是原始数据。您可以通过C++在UDP套接字中简单地发送消息(参见<代码> Socket < /代码> >代码> AFYNET、SockJoDigg<(代码)>参数和其他相关函数)。 但这意味着您错过了syslog的许多功能,如功能和优先级


@Moose是对的:
syslog
API更符合您的需要,因为它更灵活(如果您想更改行为,无需修改程序,只需重新配置syslog守护进程即可)。

作为一种临时措施,您可以使用“system”(nc-w0-u 192.168.1.1 514是的,我知道,但我不想在源代码中使用netcat。这就是为什么我提到它是临时的。什么不起作用?通过UDP发送数据或使用本机
syslog
API?
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);
}