title: Set Client Name and Get Client Name in Server in C
body: <p>Basically What I want to do is get a list of clients connected to a server. 
  I want to </p>
  
  <ul>
  <li><strong>Set Client Name</strong></li>
  <li><strong>Get Client Names in Server</strong></li>
  </ul>
  
  <p>Here is the code:-</p>
  
  <p>Server.c Code</p>
  
  <pre><code>/*A simple server. The port number is passed as an argument */
  
  #include &lt;stdio.h&gt;
  #include &lt;sys/types.h&gt;
  #include &lt;sys/socket.h&gt;
  #include &lt;netinet/in.h&gt;
  
  void error(char *msg)
  {
      perror(msg);
      exit(1);
  }
  
  int main(int argc, char *argv[])
  {
      int sockfd, newsockfd, portno, clilen;
      char buffer[256];
      struct sockaddr_in serv_addr, cli_addr;
      int n;
  
      if (argc &lt; 2)
      {
          fprintf(stderr, "ERROR, no port provided\n");
          exit(1);    
      }
  
      sockfd = socket(AF_INET, SOCK_STREAM, 0);
  
      if (sockfd &lt; 0)
      {
          error("ERROR OPENING SOCKET");
      }
  
      bzero((char *) &amp;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 *) &amp;serv_addr, sizeof(serv_addr)) &lt; 0)
      {
          error("ERROR ON BINDING");
      }
  
      listen(sockfd, 5);
      clilen = sizeof(cli_addr);  
  
      newsockfd = accept(sockfd, (struct sockaddr *) &amp;cli_addr, &amp;clilen);
  
  
  
      if (newsockfd &lt; 0)
      {
          error("ERROR ON ACCEPT");
      }
  
  
      bzero (buffer, 256);
  
      n = read(newsockfd, buffer, 255);
  
      if (n &lt; 0)
      {
          error("ERROR READING FROM SOCKET");
      }
      printf("Following clients are connected:\n");
  
      printf("Here is the message: %s\n", buffer);
  
  
      n = write(newsockfd, "I got your message", 18);
  
      if (n &lt; 0)
      {
          error("ERROR WRITING TO SOCKET");
      }
  
  
  
      return 0;
  }
  </code></pre>
  
  <p>Client.c Code</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;sys/types.h&gt;
  #include &lt;sys/socket.h&gt;
  #include &lt;netinet/in.h&gt;
  #include &lt;netdb.h&gt;
  
  void error(char *msg)
  {
      perror(msg);
      exit(0);
  }
  
  int main(int argc, char *argv[])
  {
      int sockfd, portno, n;
      struct sockaddr_in serv_addr;
      struct hostent *server;
  
  /*
      int option = 0;
      char clientname[100];
  
      while( option != 3)
      {
          printf("If you want to see the list of clients press 1.\n");
          printf("If you want to chat with a certain client press 2 &amp; enter its Name with message: ");
  
          scanf("%d", &amp;option);
  
          if( option == 2)
          {   
              printf("Enter client name: ");
              scanf("%s", &amp;clientname);
              option = 3;
          }
      }
  */
  
  
      char buffer[256];
  
      if (argc &lt; 3)
      {
          fprintf(stderr,"usage %s hostname port\n", argv[0]);
          exit(0);    
      }
  
      portno = atoi(argv[2]);
  
      sockfd = socket(AF_INET, SOCK_STREAM, 0);
  
      if (sockfd &lt; 0)
      {
          error("ERROR OPENING SOCKET");
      }
  
      server = gethostbyname(argv[1]);
      if (server == NULL)
      {
          fprintf(stderr, "ERROR, no such host\n");
          exit(0);
      }
  
      bzero((char *) &amp;serv_addr, sizeof(serv_addr));
      serv_addr.sin_family = AF_INET;
  
      bcopy((char *)server-&gt;h_addr,(char *)&amp;serv_addr.sin_addr.s_addr, server-&gt;h_length);
  
      serv_addr.sin_port = htons(portno);
  
      if (connect(sockfd,&amp;serv_addr,sizeof(serv_addr)) &lt; 0)
      {
          error("ERROR CONNECTING");
      }
  
      printf("Please Enter a message: ");
      bzero(buffer,256);
      fgets(buffer,255,stdin);
      n = write(sockfd, buffer, strlen(buffer));
      if (n &lt; 0)
      {
          error("ERROR writing to SOCKET");
      }
      bzero(buffer,256);
      n = read(sockfd,buffer,255);
      if (n &lt; 0)
      {
          error("ERROR reading from SOCKET");
      }
      printf("%s\n", buffer);
  
      return 0;
  }
  </code></pre>
  
  <p>I tried adding the following code in server.c but nothing happened</p>
  
  <pre><code>    getpeername(newsockfd, (struct sockaddr*)&amp;cli_addr, &amp;clilen);
  
      struct sockaddr_in *newsockfd = (struct sockaddr_in *)&amp;cli_addr;
      portno = ntohs(newsockfd-&gt;sin_port);
      inet_ntop(AF_INET, &amp;newsockfd-&gt;sin_addr, ipstr, sizeof ipstr);
  
  
      printf("Peer IP address: %s\n", ipstr);
      printf("Peer port      : %d\n", portno);
  </code></pre>