MULTI USER CHAT


Page 1 2 3 4 5 6 7 8 9



SOURCE CODE

SERVER


#include “stdio.h “
#include “sys/types.h “
#include “sys/socket.h “
#include “netinet/in.h “
#define MAXSIZE 25
main()
{
system("clear");
struct sockaddr_in ss_addr, c_addr,c1_addr, c2_addr ;
int sockfd, rval;
socklen_t addr_len, addr_len1;
char buff[MAXSIZE], buff1[MAXSIZE];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1 )
printf("socket(logical port) creation error");
ss_addr.sin_family = AF_INET;
ss_addr.sin_port = htons(6919);
ss_addr.sin_addr.s_addr = htonl(INADDR_ANY);
rval = bind(sockfd, (struct sockaddr*) &ss_addr, sizeof(ss_addr));

if (rval == -1)
{
printf( "Binding error");
close(sockfd);
}
else
{
addr_len = sizeof(c_addr);
addr_len1 = sizeof(c1_addr);
rval=recvfrom(sockfd,buff,sizeof(buff), 0, (struct sockaddr*)&c_addr,&addr_len );

if (rval == -1)
printf("while recving from 1st problem.");
puts(buff);
rval = recvfrom(sockfd, buff1, sizeof(buff1), 0, (struct sockaddr*)&c1_addr,&addr_len1 );
puts(buff1);

while(1)
{
rval= recvfrom(sockfd,buff1,sizeof(buff1), 0, (struct sockaddr*)&c1_addr, &addr_len1 );

if (rval == -1)
{
printf("while recving from 2nd problem.");
close(sockfd);
}
puts(buff1);
rval = sendto(sockfd, buff1, sizeof(buff1), 0, (struct sockaddr*)&c_addr, addr_len );
if (rval == -1)
printf("while sending from server to 1st client problem.");
// For Client 1
rval = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr*)&c_addr, &addr_len );
if (rval == -1)
{
printf("while recving from 1st problem.");
close(sockfd);
}
puts(buff);
rval = sendto(sockfd, buff, sizeof(buff), 0, (struct sockaddr*)&c1_addr, addr_len1 );
if (rval == -1)
{
printf("while sending from server to 2nd client problem.");close(sockfd);
}
if (rval == -1)
{
printf("breaking from loop ");
close(sockfd);
break;
}
} // while end
}
close(sockfd);
}



CLIENT1


#include “sys/types.h “
#include “sys/socket.h “
#include “netinet/in.h “
#include “stdio.h “
#include “string.h “
#define MAXSIZE 25
main()
{
system("clear");
struct sockaddr_in c_addr, s1_addr;
int sockfd, rval;
socklen_t addr_len;
char buff[MAXSIZE];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1)
printf("Error while socket creation");
s1_addr.sin_family = AF_INET;
s1_addr.sin_port = htons(6919);
s1_addr.sin_addr.s_addr = inet_addr("127.0.0.1") ;
read(0,buff,sizeof(buff));
rval = sendto(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&s1_addr, sizeof(s1_addr));

if (rval == -1)
{
printf("While sending problem");
close(sockfd);
}

while(1)
{
addr_len = sizeof(s1_addr);
rval=recvfrom(sockfd,buff,sizeof(buff),0,(struct sockaddr *)&s1_addr,&addr_len);

if (rval == -1)
{
printf("While receving problem");
close(sockfd);
}


else
{
puts("from server received ");
puts(buff);
}

read(0,buff,sizeof(buff));
rval = sendto(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&s1_addr,sizeof(s1_addr) );

if (rval == -1)
{
printf("While sending problem");
close(sockfd);
}
} // while end
close(sockfd);
}


CLIENT2

#include “stdio.h “
#include “sys/types.h “
#include “sys/socket.h “
#include “netinet/in.h “
#include “string.h “
#define MAXSIZE 25
main()
{
system("clear");
struct sockaddr_in c_addr, s1_addr;
int sockfd, rval;
socklen_t addr_len;
char buff[MAXSIZE];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1)
printf("Error while socket creation");
s1_addr.sin_family = AF_INET;
s1_addr.sin_port = htons(6919);
s1_addr.sin_addr.s_addr = inet_addr("127.0.0.1") ;
read(0,buff,sizeof(buff));
rval=sendto(sockfd,buff,sizeof(buff),0,(struct sockaddr *)&s1_addr ,sizeof(s1_addr));


if (rval==-1)
{
printf("While sending problem");
close(sockfd);
}

while(1)
{
read(0,buff,sizeof(buff));
rval=sendto(sockfd,buff,sizeof(buff),0,(struct sockaddr *)&s1_addr,sizeof(s1_addr) );

if (rval == -1)
{
printf("While sending problem");
close(sockfd);
}
addr_len = sizeof(s1_addr);
rval = recvfrom(sockfd,buff,sizeof(buff),0,(struct sockaddr *)&s1_addr,&addr_len );

if (rval == -1)
{
printf("While receving problem");
close(sockfd);
}
else
{
puts("from server received ");
puts(buff);
}
} // while end
close(sockfd);
}


OUTPUT

SERVER


[NPLab@localhost ~]$ cc multis.c
[NPLab@localhost ~]$ ./a.out
hi

hello


CLIENT1


[NPLab@localhost ~]$ cc multic1.c
[NPLab@localhost ~]$ ./a.out
hi

CLIENT2


[NPLab@localhost ~]$ cc multic2.c
[NPLab@localhost ~]$ ./a.out
hello