В следующем коде я хотел бы извлечь IP-адрес подключенного клиента после принятия входящего соединения. Что мне делать после accept()
, чтобы достичь этого?Извлечь IP из соединения, которое прослушивает и принимает в программировании сокетов в Linux в c
int sockfd, newsockfd, portno, clilen;
portno = 8090;
clilen = 0;
pthread_t serverIn;
struct sockaddr_in serv_addr, cli_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("ERROR opening socket");
}
bzero((char *) & serv_addr, sizeof (serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(portno);
serv_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sockfd, (struct sockaddr *) & serv_addr, sizeof (serv_addr)) < 0)
{
perror("ERROR on binding");
}
listen(sockfd, 5);
clilen = sizeof (cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) & cli_addr, &clilen);
У вас уже есть это в cli_addr, не так ли? – zneak
@zneak Мне нужен IP-адрес для клиента, который подключается ко мне – SjB
Да, это то, что 'accept()' возвращает вам в 'cli_addr'! Вам нужно только отформатировать его - посмотрите ответы ниже. –