In general you want to avoid transferring raw structures over networks unless they have specifically been designed for use as network transport, or unless you are absolutely sure that both ends will always be exactly the same architecture. Differences in padding and byte ordering may cause the data to appear garbled at the other end. The particular type of struct you are trying to transfer just will not work being sent raw (See the answer by Petros)
The problem in your send code is that hp is a pointer and you are treating it like it is the data it points to. sizeof(hp) returns the size of a pointer, not the size of the pointed-to hostent struct. Also, you are creating a pointer-to-pointer in the second argument of sendto when you do not mean to. The sending code should read:
struct hostent *hp;
hp=gethostbyname("www.google.com");
sendto(sockDes,hp,sizeof(*hp),0,(struct sockaddr *)&cli_addr,sizeof(cli_addr));
You also have a problem in the receive code. You are supposed to allocate space for recvfrom to store the data it received. It does not allocate it for you. Change your receive code to one of these two:
// Store on the stack
struct hostent h;
msg=recvfrom(mysock,&h,sizeof(h),0,(struct sockaddr)&serv_addr,&size_len);
or
// Store on the heap, be sure to free() when done
struct hostent * hp = malloc(sizeof(struct hostent));
msg=recvfrom(mysock,hp,sizeof(*hp),0,(struct sockaddr)&serv_addr,&size_len);