This is my project in college. This is a 1 to 1 chatroom code which i have implemented. i need a smalll alteration in this. when a client types ""exit"" in the dialog box, the session should close automatically.
This is the SERVER side code
Code:
/* ECE 545 Project - 1*/
/* One to one chat room (server) using TCP */
/* Group No. - 16 */
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define SERVER_PORT 6667
/* Server Port Defined */
#define MAX_PENDING 5
/* Maximum number of clients */
#define MAX_LINE 256
/* Maximum String Length Defined */
int
main ()
{
struct sockaddr_in sin;
char buf[MAX_LINE];
int len,pid,ptr;
int s, new_s;
/* Build address data structure */
bzero ((char *)&sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(SERVER_PORT);
/* Setup passive open socket */
if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0)
{
perror("simplex-talk:socket");
exit(1);
}
if ((bind(s,(struct sockaddr *)&sin,sizeof(sin))) < 0)
{
perror("simplex-talk:bind");
exit(1);
}
listen (s, MAX_PENDING);
/* Wait for a connection, then receive and print text */
while(1)
{
ptr=sizeof(sin);
if ((new_s = accept(s, (struct sockaddr *)&sin, &ptr)) < 0)
{
perror("simplex-talk: accept");
exit(1);
}
/* Process is forked to recieve and send text */
if((pid=fork())>0)
{
while(len=recv (new_s, buf, sizeof(buf), 0))
fputs(buf, stdout);
close(new_s);
}
else
{
while(fgets(buf,sizeof(buf),stdin))
{
buf[MAX_LINE-1]='\0';
len=strlen(buf)+1;
send(new_s,buf,len,0);
}
}
}
}
This is the CLIENT CODE
Code:
/* ECE 545 Project - 1*/
/* One to one chat room (client) using TCP */
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define SERVER_PORT 6667
/* Server Port Defined */
#define MAX_LINE 256
/* Maximum String Length Defined */
int
main (int argc, char *argv[])
{
FILE *fp;
struct hostent *hp;
struct sockaddr_in sin;
char *host;
char buf[MAX_LINE];
int s,new_s;
int len,pid;
/* Checking the presence of host name */
if (argc == 2)
{
host = argv[1];
}
else
{
fprintf(stderr,"usage:simplex-talk host\n"); exit (1);
}
/* Translate host name into peer’s IP address*/
hp = gethostbyname(host);
if (!hp)
{
fprintf(stderr,"simplex-talk:unknown host:%s\n",host);
exit (1);
}
/* Build address data structure */
bzero((char *)&sin, sizeof(sin));
sin.sin_family = AF_INET;
bcopy (hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons (SERVER_PORT);
/* Active opening of Socket */
if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0)
{
perror("simplex-talk:socket");
exit (1);
}
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{
perror("simplex-talk:connect");
close(s);
exit(1);
}
/* Main loop : Get and send lines of text */
/* Forking the process : To send and recieve the lines of text */
if((pid=fork())>0)
{
while(fgets(buf,sizeof(buf), stdin))
{
buf[MAX_LINE-1]='\0';
len=strlen(buf)+1;
send (s, buf, len, 0) ;
}
}
else
{
while(len=recv(s,buf,sizeof(buf),0))
fputs(buf,stdout);
close(s);
}
}
Thanx for the help