Bug has developed

Guys there is another bug that has developed.........now messaged above 6 bytes are trimmed and echoed back to client.After the first message the echo is not regular.I have put a loop in both client and server to check for closing.Moreover for connection close i also need to put another clause that if there is a connection break in either server or client the connection should be closed from other side.Below are the server and clinet side codes after connection

Server

 while(j!=0)
    {
      memset(buffer,0,1024);/*clear buffer*/
      n = read(newsockfd,buffer,1024);/*read from client*/
      if (n < 0) perror("\n ERROR reading from socket \n");/*check for errors*/
      len=strlen(buffer);
      for(i=0;i<=len;i++)
	{
	  //strcpy(buf1,&buffer);
	  //strcat(buf1,&buffer[i+1]);
	  k= strcmp("/",&buffer);
	
	  if(k==0)
	    break;
	  break;
	}
	      for(p=i;p<=len;p++)
		{
		  j= strcmp("q",&buffer[p]);
		
	      if(j==0)
		{
		  close(newsockfd);
		  close(sockfd);
		  exit(0);
		  
		}
		}
	
	      puts(buffer);/*print message by client*/
	      write(newsockfd,"\n Client wrote",14);/*write to client*/
	      n=write(newsockfd,buffer,sizeof(buffer));/*write to client*/
	      if(n<0)perror("Write Failed");
	
      
    }

Client Side

	while(k!=0)
	  {
	    memset(&buf, 0, sizeof(buf));
    printf("\n Enter Message for Server");
    gets(buf);
    rc = write(s, buf,sizeof(buf)); 
     if(rc<0)
      {
	perror("write failed");
      }
    /* now that we are connected, start writing to the socket */	
    /* till write() returns 0, meaning the server closed	*/
    /* the connection.				*/
    len=strlen(buf);
    for(i=0;i<=len;i++)
      {
	//strcpy(b1,&buf);
	//strcat(b1,&buf[i+1]);
	       
	l= strcmp("/",&buf);
      
	if(l==0)
	  break;
	break;
      }
	    for(p=i;p<=len;p++)
	      {
	    k=  strcmp("q",&buf[p]);
	    if(k==0)
	      {
		close(s);
		exit (0);
	      }
	      }

	    read(s,buf1,14);
	    read(s,buf2,1024);
	    puts(buf1);/*print messages from server*/
	    puts(buf2);/*print messages from server*/
    
    
	  }
      }
if(k==0)
break;
break;

What is that supposed to achieve?

I suggest you don't use C++ style comments in C code. It's a bad habit for portable code.

arjunjag, be aware of the rules. No homework questions. You are getting the whole college project done by the members of the forum.

Very first request please use CODE tags

n = read(newsockfd,buffer,1024);/*read from client*/
if (n < 0) perror("\n ERROR reading from socket \n");/*check for errors*/

Why do you continue here even after an error ? ( after perror )
Do you want to continue even when n == 0

if(k==0)
break;
break;

Does that mean to break irrespective of the value of ' k '. Then why is that part of the code ? Anything specific here ?

if(j==0)
{
close(newsockfd);
close(sockfd);
exit(0);
}

Parent not waiting for the child to complete

write(newsockfd,"\n Client wrote",14);/*write to client*/

Flusing before writing and not after that.

n=write(newsockfd,buffer,sizeof(buffer));/*write to client*/
if(n<0)perror("Write Failed");
}

The same pattern where it continues processing even after write call returns a negative value

gets(buf);

This function would not check any buffer overrun.

try to use fgets.

:slight_smile: