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.
Client:
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 < 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 < 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 *) &serv_addr, sizeof(serv_addr)); //clear the memory for server address serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->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 *)&serv_addr,sizeof(serv_addr)) < 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->srcID = 0x01; pkt->destID = 0x02; pkt->pver = 0x01; pkt->profiles = 0x01; pkt->length = 128; pkt->data = 1; 2; 3; 4; 5; 6; 7; 8; if (send(sockfd,pkt,sizeof(packet_size),0) <0) printf ("error\n"); else printf ("packet send done"); return 0; } Server:
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 < 2) { fprintf(stderr,"usage: %s port_number1",argv[0]); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR DETECTED !!! Problem in opening socket"); bzero((char *) &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 *) &serv_addr, sizeof(serv_addr)) < 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 *) &cli_addr, &clilen); if (newsockfd < 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) < 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->srcID; DestID = pkt->destID; Pver = pkt->pver ; Profiles = pkt->profiles; Length = pkt->length; Data = pkt->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; } 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.
payloadinstead ofpkt?