Как распечатать адрес клиента при запуске кода сервера в сокете - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь изменить код сервера, который прослушивает другой клиент, теперь я хочу напечатать строку типа «получено соединение с адреса клинета». Но как мне добиться этого? Это код сервера.

  #include <stdio.h>
  #include <unistd.h>
  #include <stdlib.h>
  #include <string.h>
  #include <sys/types.h> 
  #include <sys/socket.h> 
  #include <netinet/in.h>

    int main(int argc, char *argv[])
 {


 int sockfd, newsockfd, portno, pid;

 socklen_t clilen;

 struct sockaddr_in serv_addr, cli_addr;

 if (argc < 2) {

     fprintf(stderr,"ERROR, no port provided\n");

     exit(1);
 }

 sockfd = socket(AF_INET, SOCK_STREAM, 0);

    if (sockfd < 0) 
    error("ERROR opening socket");

  bzero((char *) &serv_addr, sizeof(serv_addr));
  portno = atoi(argv[1]);
  serv_addr.sin_family = AF_INET;
  serv_addr.sin_addr.s_addr = INADDR_ANY;
  serv_addr.sin_port = htons(portno);
  if (bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 

          error("ERROR on binding");

 listen(sockfd,5);

 clilen = sizeof(cli_addr);
    while (1) 
   {

    newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, &clilen);

     if (newsockfd < 0) 
         error("ERROR on accept");

   printf("got connection from %s",&cli_addr);

     pid = fork();

     if (pid < 0)

     error("ERROR on fork");

      if (pid == 0) 
     {

         close(sockfd);

         exit(0);
     }
     else

    close(newsockfd);

     } /* end of while */

   close(sockfd);

   return 0; /* we never get here */
     }

Printf ("получено соединение от% s", & cli_addr);

В этой конкретной строке мне нужно распечатать адрес клиента

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Используйте функцию inet_ntoa для преобразования двоичного IP-адреса в точечную нотацию.

1 голос
/ 17 декабря 2015

Используйте inet_ntop, чтобы показать адрес клиента следующим образом:

printf("Client Adress = %s",inet_ntop(AF_INET,&cli_addr.sin_addr,
                    clientname,sizeof(clientname)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...