title: Sending Data in socket programming using "C"
body: <p>I had earlier posted a question, regarding same, but over here i want guidance for my code. Using the tips from people I have tried to create for sending a packet. My  max packet structure alongwith header and payload is of 16 bytes.Kindly if possible glance through the sending and receiving code and suggest where i am going wrong. Basically my client keeps sending data to server,it just doesn't end and server doesn't show results.</p>
  
  <p>Client:                </p>
  
  <pre><code>int main(int argc, char *argv[])
  {
      int sockfd, portno, n;
      struct sockaddr_in serv_addr;
      struct hostent *server;
      struct packet
      { 
          long int srcID;
          long int destID;
          long int pver;
          long int profiles;
          char length;
          long int data;
      };
      if (argc &lt; 3) {
          fprintf(stderr,"usage: %s hostname port\n", argv[0]);
          exit(0);
      }
      portno = atoi(argv[2]); //Convert ASCII to integer
      sockfd = socket(AF_INET, SOCK_STREAM, 0); // socket file descriptor
  
      if (sockfd &lt; 0) 
          error("ERROR DETECTED !!! Problem in opening socket\n");
  
      server = gethostbyname(argv[1]);
      if (server == NULL) {
          fprintf(stderr,"ERROR DETECTED !!!, no such server found \n");
          exit(0);
      }
  
      bzero((char *) &amp;serv_addr, sizeof(serv_addr)); //clear the memory for server address
  
      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);
  
      printf("Client 1 trying to connect with server host %s on port %d\n", argv[1], portno); 
  
      if (connect(sockfd,(struct sockaddr *)&amp;serv_addr,sizeof(serv_addr)) &lt; 0) 
      error("ERROR in connection");
  
      printf("SUCCESS !!! Connection established \n");
  
      char buffer[128];
      struct packet *pkt = (struct packet *) buffer;
      char *payload = buffer + sizeof(struct packet);
      long int packet_size;
  
      printf("Started Creating packet\n");
      pkt-&gt;srcID = 0x01;
      pkt-&gt;destID = 0x02;
      pkt-&gt;pver = 0x01;
      pkt-&gt;profiles = 0x01;
      pkt-&gt;length = 128;
      pkt-&gt;data = 1; 2; 3; 4; 5; 6; 7; 8;
  
  
      if (send(sockfd,pkt,sizeof(packet_size),0) &lt;0)
          printf ("error\n");
      else
          printf ("packet send done");
      return 0;
  }
  </code></pre>
  
  <p>Server:            </p>
  
  <pre><code>int main(int argc, char *argv[])
  {
      int sockfd, newsockfd, portno, clilen;
      struct sockaddr_in serv_addr, cli_addr;
      int n;
      char wish;
  
      long int SrcID;
      long int DestID;
      long int Pver;
      long int Profiles;
      long int Data;
      char Length;
      char bytes_to_receive;
      char received_bytes;
      struct packet
      { 
          long int srcID;
          long int destID;
          long int pver;
          long int profiles;
          char length;
          long int data;
      };
  
      if (argc &lt; 2) {
          fprintf(stderr,"usage: %s port_number1",argv[0]);
          exit(1);
      }
      sockfd = socket(AF_INET, SOCK_STREAM, 0);
      if (sockfd &lt; 0) 
          error("ERROR DETECTED !!! Problem in 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 = htonl(INADDR_ANY);
      serv_addr.sin_port = htons(portno);
  
      if (bind(sockfd, (struct sockaddr *) &amp;serv_addr, sizeof(serv_addr)) &lt; 0) 
          error("ERROR DETECTED !!! There was a problem in binding");
  
      listen(sockfd, 10);
      clilen = sizeof(cli_addr);
  
      printf("Server listening on port number %d...\n", serv_addr.sin_port); 
  
      newsockfd = accept(sockfd,(struct sockaddr *) &amp;cli_addr, &amp;clilen);
  
      if (newsockfd &lt; 0) 
          error("ERROR DETECTED !!! the connection request was not accepted");
  
      char buffer[128];
      struct packet *pkt = (struct packet *) buffer;
      char *payload = buffer + sizeof(struct packet);
      long int packet_size;
  
      bytes_to_receive = sizeof(pkt);
      received_bytes = 0;
  
      if (recv(newsockfd, pkt, sizeof(pkt), 0) &lt; 0)
          error("ERROR DETECTED !!! There was a problem in reading the data");
      else
      { 
          do {
              received_bytes += (buffer + received_bytes, bytes_to_receive - received_bytes);
          } while (received_bytes != bytes_to_receive);
  
          SrcID = pkt-&gt;srcID;
          DestID = pkt-&gt;destID;
          Pver = pkt-&gt;pver ;
          Profiles = pkt-&gt;profiles;
          Length = pkt-&gt;length;
          Data = pkt-&gt;data;
          printf("Data Received from Client_1 are :\n");
          printf("Source ID: %l\n", SrcID);
          printf("Destination ID: %l\n", DestID);
          printf("profile Version: %l\n", Pver);
          printf("No of Profiles: %l\n", Profiles);
          printf("Length: %l\n", Length);
          printf("data : %l\n", Data);
      }
      if (close(newsockfd) == -1) {
          error("Error closing connection with client 1");
      }
  
      printf("Connection with client 1 has been closed\n");
      return 0; 
  }
  </code></pre>
  
  <p>The server is not showing any o/p. Client says it has send the packet. While compiling the server code i see four warnings saying unknown conversion type characters 0xa in format for all the printf statements in server code. I guess I am going wrong somewhere in the server code side, but I am not able to follow the "serialization". Please update me with your inputs, it would be of great help.</p>