Monday, May 24, 2010

Help me to write a chat programm in C socket programming?

i want to write a program in c socket programming for chat room for chatting





a cliet server communiaction





plz give suggestion who to start the project





give sites

Help me to write a chat programm in C socket programming?
//Here is some server code





/* Server.c */


/* Compile: gcc -o Server Server.c*/


#include %26lt;sys/types.h%26gt;


#include %26lt;sys/socket.h%26gt;


#include %26lt;netinet/in.h%26gt;


#include %26lt;arpa/inet.h%26gt;


#include %26lt;netdb.h%26gt;


#include %26lt;stdio.h%26gt;


#include %26lt;time.h%26gt;


#include %26lt;unistd.h/%26gt; /* close*/





#define MAX_MSG 100





int main (int argc, char *argv[])


{


time_t Time;


int rc, sd, newSd, cliLen, recvLen, NUM, SERVER_PORT;


struct sockaddr_in cliAddr, servAddr;


char line[MAX_MSG];


char recline[MAX_MSG];





/*Check to see if there are 2 arguments*/





if(argc %26lt; 2)


{


printf("usage: %s %26lt;port#%26gt;\n",argv[0]);


exit(1);


}





SERVER_PORT = atoi(argv[1]);


if(SERVER_PORT %26lt; 1 )


{


printf("Warning: %i is a valid port number", SERVER_PORT);


exit(1);


}





/* create socket */


sd = socket(AF_INET, SOCK_STREAM, 0);


if(sd%26lt;0)


{


perror("Socket could not be opened.");


exit(1);


}





/* bind server port */


servAddr.sin_family = AF_INET;


servAddr.sin_addr.s_addr = htonl(INADDR_ANY);


servAddr.sin_port = htons(SERVER_PORT);


if(bind(sd, (struct sockaddr *) %26amp;servAddr, sizeof(servAddr))%26lt;0)


{


perror("Cannot bind port ");


exit(1);


}








while(1)


{


/*listen for a socket*/


listen(sd,10);


printf("%s: waiting for data on port TCP%u\n", argv[0],SERVER_PORT);


cliLen=sizeof(cliAddr);


newSd= accept(sd, (struct sockaddr *) %26amp;cliAddr, %26amp;cliLen);


if(newSd %26lt;0)


{


perror("cannot accept connection");


exit(1);


}





/* init line*/


memset(line,0x0,MAX_MSG);








/* receive segments*/


recvLen = recv(newSd, line, MAX_MSG, 0); /*waits for data */


if(recvLen %26lt; 0)


{


perror("Data Error!!" );


exit(1);


}





/*Got data, so output it, and chnage change it*/


printf("%s: received data from %s:TCP%d : %s\n",argv[0],


inet_ntoa(cliAddr.sin_addr), ntohs(cliAddr.sin_port), line);


Time=time(NULL);


sscanf(line,"%d",%26amp;NUM);


Time += NUM;


sprintf(line, "%ld", %26amp;Time);








/*send back time*/


rc = send(newSd, %26amp;Time , strlen(line) + 1, 0);


}


close(newSd);


return 0;


}





/*************************************...


/*************************************...


/*************************************...


/*************************************...


/*************************************...


//Here is some Client stuff...





/*tcpClient.c */


/* Compile: gcc -o tcpCleint tcpClient.c*/





#include %26lt;sys/types.h%26gt;


#include %26lt;sys/socket.h%26gt;


#include %26lt;netinet/in.h%26gt;


#include %26lt;arpa/inet.h%26gt;


#include %26lt;netdb.h%26gt;


#include %26lt;stdio.h%26gt;


#include %26lt;stdlib.h%26gt;//to conver strign to number


#include %26lt;unistd.h/%26gt; /* close*/








//Define the max message lenght


#define MAX_MSG 100





int main(int argc, char*argv[])


{


int sd, rc, recvLen, SERVER_PORT;


char msg_buff[MAX_MSG];


time_t calTime;


struct sockaddr_in localAddr, servAddr;


struct hostent *h;





/*Check to see if there are 2 arguments*/


if(argc %26lt; 3)


{


printf("usage: %s %26lt;server%26gt; %26lt;port#%26gt;\n",argv[0]);


exit(1);


}





SERVER_PORT = atoi(argv[2]);


if(SERVER_PORT %26lt; 1 )


{


printf("Warning: %i is a valid port number", SERVER_PORT);


exit(1);


}








h = gethostbyname(argv[1]);


if(h==NULL)


{





printf("%s: unknown host '%s'\n",argv[0],argv[1]);


exit(1);


}





servAddr.sin_family = h-%26gt;h_addrtype;


memcpy((char *) %26amp;servAddr.sin_addr.s_addr, h-%26gt;h_addr_list[0], h-%26gt;h_length);


servAddr.sin_port= htons(SERVER_PORT);





/* create socket */


sd = socket(AF_INET, SOCK_STREAM, 0);


if(sd%26lt;0)


{


perror("cannot open socket ");


exit(1);


}








/* connect to server */


rc = connect(sd, (struct sockaddr *) %26amp;servAddr, sizeof(servAddr));


if(rc%26lt;0)


{


perror("cannot connect " );


exit(1);


}





/*input of usernumber*/


char NUM[MAX_MSG];


printf("Enter in a number:");


scanf("%s",%26amp;NUM);





/*sending of number*/


rc = send(sd,%26amp;NUM,strlen(NUM)+1,0);


if(rc%26lt;0)


{


perror("cannot send data ");


close(sd);


exit(1);


}


else


{


printf("Sent %s to %s...waiting on reply.\n",NUM,argv[1]);


}





/*wait for data */


recvLen = recv(sd, msg_buff, MAX_MSG, 0);


printf("Reply recived, UserTime:%s\n", ctime(msg_buff));


return 0;


}


No comments:

Post a Comment