Server client for distributed system
I'm not really into networking, but I can say a little about your coding style:

Missing return 

if (socket_desc == -1) {
    printf("Could not create socket");
}
puts("Socket created");


If socket_desc is equal to -1. Could not create socket will be printed as well as Socket created, which is misleading. I think: 

if (socket_desc == -1) {
    printf("Could not create socket");
    return -1;                           /* or some other error code */
}
puts("Socket created");


is appropriate and the code doesn't proceeds. 

Outsource
I'm also not sure if it would be better to outsource this part (as void prepareServer(sockaddr_in *server):

server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 8888 );


Unnecessary comments
I don't know who else will read this code but comments like //print the error message followed by this perror("bind failed. Error");

will just make the code more obscure, since the goal of the error message is pretty obvious.

Calling strlen for no reason
Also it's not really clear to me, why you need to call strlen(client_message) here

write(sock , client_message , strlen(client_message));


when you store assign read_size a few lines above in the while-condition. strlen will just search for a '\0', which you assign by yourself with read_size...

Besides these points I can't see any major mistakes. You should just think about your comments a little more (Do I really need this information? Is this self explaining? Is a single line comment enough here?).
As I already said: I can't say much about the networking part, maybe someone else will jump here.