Hamming Code -- Client

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <math.h>

/* Hamming code generator */
void ham_code_generator(char msg[255],char temp[255])
{
int hamBit = 0,i,j,k,sum;
int len = strlen(msg);
printf("\n str len is %d\n",len);
bzero(temp,255);


while( pow(2,hamBit) < len )
hamBit++;
printf("hambit: %d\n",hamBit);
/* Setting the hamming bits in temp arr to 'h' */
for(i = 0;i < hamBit ;i++)
{
k=pow(2,i);
temp[k] = 'h';
}

k=len-2;
j =0;
for(i = k+hamBit;i >= 1;i--)
{
if(temp[i]!='h'){
temp[i] = msg[j];j++;}
}
// Assigning the hamming bits
for(i=0;i<hamBit;i++)
{
k=pow(2,i);
sum = 0;
for(j=k ; j<= ((len-2) + hamBit) ; j++)
{
if((k&j) == k)
sum += (temp[j] - 48);
}
sum = sum % 2;
if(sum == 0)
temp[k] = '0';
else
temp[k] = '1';
}

for(i = ((len-2)+hamBit) ; i >= 1 ; i--)
{
printf(" %c ",temp[i]);
}
printf("\n");

strcpy(msg,temp);
strcat(msg,"\n");
}

void error(const char *msg)
{
perror(msg);
exit(1);
}


/* Main Funnction */
void main(int argc,char *argv[])
{
/* Check if all inputs are correct */
if (argc < 3)
{
error("Provide the port number and IP !!!");
}
//TODO (1) Declaration
int sockfd,newsockfd,i;
struct sockaddr_in serv_addr,cli_addr;
char msg[255],reply[255];

serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
serv_addr.sin_port = htons(atoi(argv[2]));
/* Socket */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
error("Socket Error!!!");
}

/* Connect */
newsockfd = connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
if (newsockfd < 0)
{
error("Accept Error!!!");
}
while(1)
{
// Read And Write msg
bzero(&msg , 255);
bzero(&reply , 255);

printf("You : ");
fgets(msg , 255 , stdin);
ham_code_generator(msg);
write(sockfd , msg , 255);

read(sockfd , reply , 255);
printf("Server : %s\n",reply);

if(strcmp(reply,"Bye\n")==0 || strcmp(msg,"Bye\n")==0)
break;
}
close(sockfd);
}

Comments