I am writing a client server application using TCP sockets on C. For writing data to the server I am sending a structure like this:
typedef struct { uint64_t IEEE_ADDR; uint8_t endpoint; char requestedAction; uint8_t level; uint8_t wc; uint8_t address_mode; uint8_t gID; uint8_t sID; uint8_t val1; uint8_t val0; uint8_t status; }dsfeedbackPkt; For serialising and sending data I have written following function:
void fb_serialise_send(dsfeedbackPkt *pkt) { unsigned char buffer[SIZE]; int bytes; buffer[0] = ((pkt->IEEE_ADDR) >> 56); buffer[1] = (pkt->IEEE_ADDR) >> 48; buffer[2] = (pkt->IEEE_ADDR) >> 40; buffer[3] = (pkt->IEEE_ADDR) >> 32; buffer[4] = (pkt->IEEE_ADDR) >> 24; buffer[5] = (pkt->IEEE_ADDR) >> 16; buffer[6] = (pkt->IEEE_ADDR) >> 8; buffer[7] = (pkt->IEEE_ADDR); buffer[8] = (pkt->endpoint); buffer[9] = pkt -> requestedAction; buffer[10] = pkt->level; buffer[11] = pkt-> wc; buffer[12] = pkt->address_mode; buffer[13] = pkt-> gID; buffer[14] = pkt->sID; buffer[15] = pkt->val1; buffer[16] = pkt->val0; buffer[17] = pkt->status; bytes = write(cli_sockfd,buffer,sizeof(buffer)); } The problem is the data is being received at the server twice, as in two different packets. The second packet mostly contains garbage.
I have browsed through the internet, there are mostly issues related to endianess. But that is not a problem here, also both client and server know the message length beforehand, only the data is received at the server side twice.
Please can anyone suggest what I have missed?
I made following changes:
#define SIZE 18 on client side and
#define RSIZE 18 on server side
and its working the problem was using sizeof(dsfeedbackPkt) for defining the size.
SIZE?