title: how to fix the while loop in server.c and client.c
body: <p>server.c</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;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &lt;netdb.h&gt;
  #include &lt;arpa/inet.h&gt;
  #include &lt;unistd.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;
       char *result1 = "Ian G. Harris";
       char *result2 = "Joe Smith";
       char *result3 = "Jane Smith";
       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");
       }
       while (strcmp(buffer, "+++") != 0)
       {
           bzero(buffer,256);
           n = read(newsockfd,buffer,255);
           if (n &lt; 0) error("ERROR reading from socket");
           printf("Address server started\n");
           if (strcmp(buffer, "harris@ics.uci.edu\n") == 0)
           {
               printf("%s\n", result1);
           }
           else if(strcmp(buffer, "joe@cnn.com\n") == 0)
           {
                printf("%s\n", result2);
           }
           else if(strcmp(buffer, "jane@slashdot.org\n")==0)
           {
               printf("%s\n", result3);
           }
       }
       return 0; 
  }
  </code></pre>
  
  <p>client.c</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; 
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &lt;arpa/inet.h&gt;
  #include &lt;unistd.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;
  
      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,(struct sockaddr *)&amp;serv_addr,sizeof(serv_addr)) &lt; 0) 
          error("ERROR connecting");
      while (strcmp(buffer, "+++") != 0)
      {
          printf("&gt; ");
          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 am new to c and I am writing a server.c and client.c. The problem of my code is that I cannot make the program keep taking inputs until I enter "+++" to quit. The correct output is shown below:</p>
  
  <p>client terminal:</p>
  
  <pre><code>&gt; harris@ics.uci.edu
  Ian G. Harris
  &gt; joe@cnn.com
  Joe
  &gt;
  </code></pre>
  
  <p>server terminal:</p>
  
  <pre><code>Address server started
  harris@ics.uci.edu
  joe@cnn.com
  </code></pre>
  
  <p>in my code, when I enter "harris@ics.uci.edu" in client terminal, it does the following:</p>
  
  <pre><code>&gt; harris@ics.uci.edu
  (empty line) 
  </code></pre>
  
  <p>and it does not take any input anymore. </p>
  
  <p>Is there something wrong in the while loop? can someone help me to fix it? Thanks in advance. </p>