Ich schreibe ein Programm im Client/Server-Stil. Jetzt entwickle ich die Serverseite, und ich öffne einen Sockel.Wer ist auf Socket in C verbunden
Aber ich muss wissen, wer in meiner Steckdose angeschlossen ist. Welche IP ist verbunden? Weil ich Logs schreiben muss, die sich auf dem Server verbinden.
Also, meine Frage ist, wie kann ich das in C tun? Unter Linux.
Ich versuche getsockopt()
zu verwenden, aber nicht funktionieren. Und ich bin neu in der Netzwerkprogrammierung.
Jemand weiß, wie kann ich das tun?
Hier ist der Code meiner Fassung:
int init_socket() {
/** Declara um socket */
Socket sock;
/** Inicia o socket */
sock.socket = socket(AF_INET, SOCK_STREAM, 0);
/** Seta zeros no sockaddr */
memset(&sock.server, 0, sizeof (sock.server));
/** E tambem no buffer */
memset(sock.buff, 0, sizeof (sock.buff));
/** Seta os valores do sockaddr */
sock.server.sin_family = AF_INET;
sock.server.sin_addr.s_addr = htonl(INADDR_ANY);
//sock.server.sin_port = htons(get_config_int(&conf, "monitor_port"));
sock.server.sin_port = htons(2200);
/** Chama o bind */
bind(sock.socket, (struct sockaddr*) &sock.server, sizeof (sock.server));
/*
* É um socket blocante, então espera encher o buffer
* Faz o listen
*/
if (listen(sock.socket, 2) == -1) {
/** Deu falha na preparação para o accept, insere nos logs */
insert_log(FATAL, LOG_KERNEL, "Não foi possível iniciar o socket - event.c");
/** Retorna falha */
return INIT_SOCKET_FAILED;
}
/** Se chegar aqui, faz o accept, dentro de um loop infinito */
connect:
while ((sock.conn = accept(sock.socket, (struct sockaddr*) NULL, NULL))) {
printf("Recebi uma conexão, começando comunicação...\n");
/** Agora conn é um file descriptor, podemos ler e gravar nele */
while (1) {
if (read(sock.conn, sock.buff, sizeof (sock.buff)) == 0) {
close(sock.conn);
printf("Pronto para outra conexão...\n");
goto connect;
}
printf("Eu Li isso do Buffer: %s", sock.buff);
/** Limpa o buffer */
memset(sock.buff, 0, sizeof (sock.buff));
sleep(1);
}
}
return INIT_SOCKET_SUCCESS;
}
Dank für die Hilfe!
Verwenden Sie 'getpeername()'. –
@ n.m .: Geben Sie stattdessen Ihren Kommentar als Antwort ein. – wilx