hi guys i got this code trying to make connection between the server and multi clients but when i do ./server i got message server waiting then when i run ./client it says client 1 nosuch file i dont know whats that should i use any argument plz help how to compile and run and whats the expected output thanks in advance
this the client.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <signal.h>
void sig_handler(int);
int main()
{
int sockfd;
int len;
struct sockaddr_un address;
int result;
char ch[100] ;
char ch1[100];
int n;
//registering the SIGPIPE signal
signal(13,sig_handler);
//creating socket for client
sockfd = socket(AF_UNIX,SOCK_STREAM,0);
//name the socket agreed with the server
address.sun_family = AF_UNIX;
strcpy(address.sun_path, "server_socket");
len = sizeof(address);
//now connect our socket to the server's socket
result = connect(sockfd,(struct sockaddr *)&address,len);
if (result == -1)
{
perror("oops:client1");
exit(1);
}
//now read and write via socket
while(1)
{
printf("Enter the data\n");
n=read(0,ch,100);
// printf("read return:%d\n",n);
char close[100]= "client closed";
if (n==0)
{
write(sockfd,close,sizeof(close));
exit(0);
}
n=write(sockfd,ch,n);
// printf("write return:%d\n",n);
// sleep(3);
// printf("Reply from server:");
n=read(sockfd,ch1,100);
if (n==0)
{
printf("Sorry! Server is closed\n");
printf("Bye!Bye!\n");
exit(0);
}
write(1,"Message from server:\n",21);
write(1,ch1,n);
//printf("%c",ch1);
}
close(sockfd);
exit(0);
}
void sig_handler(int signo)
{
if (signo == SIGPIPE)
{
printf("SIGPIPE SIGNAL RECEIVED\n");
exit(0);
}
}
and this is the server.c program
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/time.h>
#include <signal.h>
#include <fcntl.h>
#define SIZE 100
//signal handler for sigpipe signal
void sig_handler(int signo)
{
if(signo == SIGPIPE)
{
printf("Signal Received\n");
}
}
int main()
{
int server_sockfd,client_sockfd;
int sfd=0;
int fd;
int server_len,client_len;
int select_retval;
char buf;
struct sockaddr_un server_address;
struct sockaddr_un client_address;
struct timeval timebuf;
fd_set read_fds,set;
//Register the SIGPIPE signal
signal(SIGPIPE,sig_handler);
//Remove the old socket
unlink("Server_Multi_TCP");
//creating the socket
if((server_sockfd = socket(AF_UNIX,SOCK_STREAM,0))==-1)
{
perror("socket error");
exit(0);
}
//Naming the socket
server_address.sun_family = AF_UNIX;
strcpy(server_address.sun_path,"Server_Multi_TCP");
server_len = sizeof(server_address);
if((bind (server_sockfd,(struct sockaddr *)&server_address,server_len))==-1)
{
perror("bind error");
exit(0);
}
//create a connection queue and waiting for clients
if(listen(server_sockfd,5)==-1)
{
perror("listen error");
exit(0);
}
if(server_sockfd > sfd)
sfd = server_sockfd;
FD_ZERO(&set);
FD_SET(server_sockfd,&set);
//select time value
struct timeval tv;
/*tv.tv_sec = 10; //number of seconds to wait
tv.tv_usec = 500000; //number of micro seconds to wait*/
while(1)
{
read_fds = set;
printf("Server is Waiting\n");
//Accept a connection
if ((select_retval = select(sfd+1,&read_fds,NULL,NULL,NULL))==-1)
{
perror("select error");
exit(0);
}
for (fd = 0;fd<=sfd;fd++)
{
if(FD_ISSET(fd,&read_fds))
{
if(fd==server_sockfd)
{
client_len = sizeof(client_address);
if((client_sockfd = accept(server_sockfd,NULL,0))==-1)
{
perror("accept error");
exit(0);
}
write(client_sockfd,"Server got your request\n",24);
FD_SET(client_sockfd,&set);
if(client_sockfd > sfd)
sfd = client_sockfd;
}
else
{
int nread;
nread = read(fd,buf,sizeof(buf));
buf[nread] = '\0';
if(nread == 0)
{
FD_CLR(fd,&set);
if(fd == sfd)
sfd--;
printf("Client %d is closed\n",sfd);
close(fd);
}
else
{
printf("Server got message %s from client\n",buf,sfd);
write(fd,"server listening\n",17);
}
}
}
}
}
close(server_sockfd);
}