Hi,
I have developed a server and client code using tcp/ip protocol, which enables the client to send data to server and the same data is received from server to client.
I would like to know how to keep the client open all the time, same like as server. I should not keep executing the client every time.
I am giving the code for further reference
Server code:
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
void str_echo(int s)
{
FILE *fp,*fp1;
char buf[2000];
recv(s,buf,2000,0);
puts("Message from Client...");
fputs(buf,stdout);
send(s,buf,2000,0);
}
int main()
{
int ls,cs,len;
struct sockaddr_in serv,cli;
pid_t pid;
puts("I am Server...");
ls=socket(AF_INET,SOCK_STREAM,0);
puts("Socket Created Successfully...");
serv.sin_family=AF_INET;
serv.sin_addr.s_addr=INADDR_ANY;
serv.sin_port=htons(6777);
bind(ls,(struct sockaddr*)&serv,sizeof(serv));
puts("Binding Done...");
listen(ls,3);
puts("Listening for Client...");
for(; ;)
{
len=sizeof(cli);
cs=accept(ls,(struct sockaddr*)&cli,&len);
puts("\nConnected to Client...");
if((pid=vfork()) == 0)
{
puts("Child process created...");
close(ls);
str_echo(cs);
close(cs);
exit(0);
}
close(cs);
}
return 0;
}
Client Code:
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
void str_echo(int s)
{
char buf[2000],buf1[2000];
puts("Enter the Message...");
fgets(buf,2000,stdin);
send(s,buf,2000,0);
recv(s,buf1,2000,0);
puts("Message from Server...");
puts(buf1);
}
int main()
{
int ls;
struct sockaddr_in cli;
puts("I am Client...");
ls=socket(AF_INET,SOCK_STREAM,0);
puts("Socket Created Successfully...");
cli.sin_family=AF_INET;
cli.sin_addr.s_addr=inet_addr("127.0.0.1");
cli.sin_port=htons(6777);
connect(ls,(struct sockaddr*)&cli,sizeof(cli));
puts("Connected with Server...");
str_echo(ls);
close(ls);
return 0;
}