In This Program Many Child Can Chat With Same Server Simultaneously
Server Program
Input : Port Number
Input : Ip of Server And Port Number
Server Program
Input : Port Number
#include<stdio.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/ipc.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<netdb.h>
#include<string.h>
int main(int argc,char* argv[])
{
int socfd,nsfd,portno;
socklen_t size;
socfd=socket(AF_INET,SOCK_STREAM,0);
if(socfd==-1)
{printf("error opeing socket\n");exit(0);}
if(argc<2)
{
printf("argument error");exit(0);
}
struct sockaddr_in cliaddr,seraddr;
char buf[100];
portno=atoi(argv[1]);
bzero((char*)&seraddr,sizeof(seraddr));
seraddr.sin_family=AF_INET;
seraddr.sin_addr.s_addr = htonl(INADDR_ANY);
seraddr.sin_port = htons(portno);
if (bind(socfd, (struct sockaddr *) &seraddr,sizeof(seraddr)) < 0)
{ printf("ERROR on binding\n");exit(0);}
listen(socfd,5);
while(1)
{
size=sizeof(cliaddr);
nsfd=accept(socfd,(struct sockaddr *) &cliaddr,&size);
int c=fork();//creating child process parent will accept client and each child will chat with each client
if(c==0)
{
close(socfd);
while(1)
{
printf("server is waiting\n");
memset(buf,0,100);
recv(nsfd,buf,100,0);
printf("client said\t %s\n",buf);
memset(buf,0,100);
printf("to client\t");
gets(buf);
send(nsfd,buf,100,0);
}}
else
{
close(nsfd);
}}
return 0;
}
Client ProgramInput : Ip of Server And Port Number
#include<stdio.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<netdb.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char*argv[])
{int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
if (argc < 3) {
printf("argument error");
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{printf("error in socket");exit(0);}//creating socket
server = gethostbyname(argv[1]);
if (server == NULL) {
printf("wrong hostname");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
{printf("connect error");exit(0);}//connecting to server
while(1)
{
printf("Please enter the message: ");
bzero(buffer,100);
fgets(buffer,100,stdin);
send(sockfd,buffer,strlen(buffer),0);
bzero(buffer,100);
recv(sockfd,buffer,100,0);
printf("server said\t%s\n",buffer);
}
close(sockfd);
return 0;
}
No comments:
Post a Comment