Note that there are some explanatory texts on larger screens.

plurals
  1. POSending Data in socket programming using "C"
    text
    copied!<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>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload