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;
}
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment