Есть ли способ отправить сообщение на удаленный системный журнал в коде C ++?
эквивалентно этой строке в команде 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);
}
}
nc -u
просто отправляет данные через UDP-сокеты. В этом нет ничего особенного, нет конкретного протокола, которому нужно следовать: это просто необработанные данные. Вы можете просто отправлять свои сообщения через сокеты UDP в C ++ (см. socket
с AF_INET, SOCK_DGRAM
параметры и другие связанные функции).
Но это означает, что вам не хватает многих функций системного журнала, таких как объекты и приоритеты.
@ Лос прав: syslog
API больше соответствует вашим потребностям, так как он гораздо более гибкий (нет необходимости изменять вашу программу, если вы хотите изменить поведение, вам нужно только перенастроить демон syslog).
В нескольких Unix, включая Linux, вы можете просто использовать команду client http://linux.die.net/man/3/syslog и установите текущий сервер системного журнала, такой как syslog-ng. Этот сервер сможет не только фильтровать сообщения в соответствии с вашими правилами, но и отправлять их в любой удаленный системный журнал.
Если вы работаете в Windows, я боюсь, что вам нужно реализовать собственный протокол системного журнала. К счастью, это не так сложно и более или менее определено.