NP Prog
NP Prog
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/wait.h>
#include<fcntl.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/errno.h>
#define MYPORT 65110
void readstring(int,char*);
int listensocket,connectionsocket,retbind;
struct sockaddr_in serveraddress,cliaddr;
socklen_t len;
char buf[100],databuf[1024];
listensocket=socket(AF_INET,SOCK_STREAM,0);
if(listensocket<0)
exit(1);
memset(&serveraddress,0,sizeof(serveraddress));
serveraddress.sin_family=AF_INET;
serveraddress.sin_port=htons(MYPORT);
serveraddress.sin_addr.s_addr=htonl(INADDR_ANY);
if(-1==retbind)
{
perror("BINDERROR\n");
exit(1);
}
listen(listensocket,5);
for( ; ;)
{
printf("server:Iam waiting ... for client...\n");
len=sizeof(cliaddr);
connectionsocket=accept(listensocket,(struct sockaddr*)&cliaddr,&len);
if(connectionsocket<0)
{
if(errno==EINTR)
printf("Interrupted system call??");
continue;
}
printf("connection from
%s\n",inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(bu
f)));
readstring(connectionsocket,databuf);
close(connectionsocket);
printf("finished serving one client");
}
}
void readstring(int connectionsocket, char* msg)
{
char rev[50];
int length,pointer=0,n,i=0;
while((n=read(connectionsocket,(msg+pointer),1024))>0)
{
pointer=pointer+n;
}
msg[pointer]='\0';
while(msg[i]!='\0')
{
i++;
}
length=i;
for(i=0;i<length;i++)
{
rev[i]=msg[length-1-i];
}
printf("server:received and reversed:%s\n",rev);
}
CONCURRENT SERVER
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/wait.h>
#include<fcntl.h>
#include<unistd.h>
#define SERV_PORT 54543
#define MAXLINE 1024
#define LISTENQ 100
void str_echo(int);
int listenfd,connfd,retbind;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr,servaddr;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
retbind=bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
if(-1==retbind)
{
printf("BIND ERROR");
exit(0);
}
listen(listenfd,LISTENQ);
for( ; ; )
{
printf(" waiting for client.........\n");
clilen=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);
if((childpid=fork()) ==0)
{ close(listenfd);
printf("new child forked");
str_echo(connfd);
}
else
close(connfd);
}}
ssize_t n;
char buf[MAXLINE];
while((n=read(sockfd,buf,MAXLINE))>0)
write(sockfd,buf,n);
ITCONCLIENT
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<error.h>
#include<stdlib.h>
#define MAXLINE 1024
#define SERV_PORT 54543
void str_cli(FILE*,int);
if(argc!=2)
{
printf("usage:tcpcli <ipaddress>");
exit(0);
}
sockfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERV_PORT);
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
{
printf("cannot connect to the server");
exit(1);
}
//write(sockfd,sendline,strlen(sendline));
str_cli(stdin,sockfd);
close(sockfd);
}
while(fgets(sendline,MAXLINE,fp)!=NULL)
{
write(sockfd,sendline,strlen(sendline));
if(read(sockfd,recvline,MAXLINE)==0)
{
//printf("server terminated prematurely");
exit(0);
}
fputs(recvline,stdout);
}
DAYTIME CLIENT
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
if(argc!=2)
{
printf("usage: ./a.out<IP address>");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("socket error");
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)
{
printf("inet_pton error for %s",argv[1]);
exit(1);
}
if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
{
printf("connect error");
exit(1);
}
while((n=read(sockfd,recvline,MAXLINE))>0)
{
recvline[n]=0;
if(fputs(recvline,stdout)==EOF)
{
printf("fputs error");
}
}
if(n<0)
printf("read error");
exit(0);
}
FILECLI
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<fcntl.h>
int sd;
struct sockaddr_in sa;
if(argc!=4)
printf("enter correct no of argumnets\n");
bzero(&sa,sizeof(sa));
sa.sin_family=AF_INET;
sa.sin_port=htons(MYPORT);
inet_pton(AF_INET,argv[1],&sa.sin_addr);
sd=socket(AF_INET,SOCK_DGRAM,0);
sendfile(sd,(struct sockaddr*)&sa,sizeof(sa),argv[3]);
fd=open(fn,O_RDONLY,664);
do
{
nr=read(fd,buf,MAXLINE);
nw=sendto(sd,buf,nr,0,psa,sel);
}while(nr>0);
printf("file is sent");
}
FILE SERVER
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<fcntl.h>
#define MYPORT 59871
void getfile(int,char*);
memset(&serveraddress,0,sizeof(serveraddress));
serveraddress.sin_family=AF_INET;
serveraddress.sin_port=htons(MYPORT);
serveraddress.sin_addr.s_addr=htonl(INADDR_ANY);
retbind=bind(listensocket,(struct
sockaddr*)&serveraddress,sizeof(serveraddress
));
if(-1==retbind)
{
printf("BIND ERROR\n");
exit(1);
}
listen(listensocket,5);
for( ; ; )
{
printf("server:Iam waiting..for client..\n");
len=sizeof(cliaddr);
connectionsocket=accept(listensocket,(struct sockaddr*)&cliaddr,&len);
if(connectionsocket<0)
{
if(errno==EINTR)
printf("Interrupted sytem call??");
continue;
}
printf("connection from
%s\n",inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(buf
)));
printf("enter the name of desti file");
scanf("%s",&filename);
getfile(connectionsocket,filename);
close(connectionsocket);
printf("Finished serving one client");
}
}
int i,j,n,c,fd1;
char databuf[1000];
n=read(connectionsocket,databuf,1000);
i=strlen(databuf);
fd1=creat(filename,777);
c=write(fd1,databuf,i);
SELSERV
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/select.h>
#include<sys/time.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<fcntl.h>
#define MAXLINE 1000
#define SERV_PORT 53456
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
retbind=bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
if(-1==retbind)
{
printf("bind error");
exit(0);
}
listen(listenfd,5);
maxfd=listenfd;
maxi=-1;
for(i=0;i<FD_SETSIZE;i++)
client[i]=-1;
FD_ZERO(&allset);
FD_SET(listenfd,&allset);
for(; ;)
{
if(i==FD_SETSIZE)
{
printf("too many clients");
exit(0);
}
FD_SET(connfd,&allset);
if(connfd>maxfd)
maxfd=connfd;
if(i>maxi)
maxi=i;
if(--nready<=0)
continue;
}
for(i=0;i<=maxi;i++)
{
if((sockfd=client[i])<0)
continue;}
if(FD_ISSET(sockfd,&rset)){
if((n=read(sockfd,line,MAXLINE))==0)
{
close(sockfd);
FD_CLR(sockfd,&allset);
client[i]=-1;
}
else
{
printf("\noutput at server\n");
for(k=0;line[k]!='\0';k++)
printf("%c",toupper(line[k]));
close(sockfd);
FD_CLR(sockfd,&allset);
client[i]=-1;
}
if(--nready<=0)
break;
}
}
POLLSERV
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<fcntl.h>
#include<poll.h>
#include<errno.h>
#define MAXLINE 100
#define SERV_PORT 56785
#define POLLRDNORM 5
#define INFTIM (-1)
#define OPEN_MAX 5
retbind=bind(listenfd,(struct
sockaddr*)&servaddr,sizeof(servaddr));
listen(listenfd,5);
client[0].fd=listenfd;
client[0].events=POLLRDNORM;
for(i=1;i<OPEN_MAX;i++)
client[i].fd=-1;
maxi=0;
for(; ;)
{
printf("Server:I am waiting for the client");
nready=poll(client,maxi+1,INFTIM);
if(client[0].revents&POLLRDNORM)
{
sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);
printf("newclient:
%s\n",inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(b
uf)));
for(i=1;i<OPEN_MAX;i++)
if(client[i].fd<0)
{
client[i].fd=connfd;
break;
}
if(i==OPEN_MAX)
printf("too many clients");
client[i].events=POLLRDNORM;
if(i>maxi)
maxi=i;
if(--nready<=0)
continue;
}
for(i=1;i<=maxi;i++)
{
if((sockfd=client[i].fd)<0)
continue;
if(client[i].revents&(POLLRDNORM|POLLERR))
{
if((n=read(sockfd,line,MAXLINE))<0)
{
if(errno==ECONNRESET)
{
close(sockfd);
client[i].fd=-1;
}
else
printf("readline error");
}
else if(n==0)
{
close(sockfd);
client[i].fd=-1;
}
else
{
printf("\n data from the client is \n");
printf("data=%s\n",line);
write(sockfd,line,n);
strcpy(line," ");
}
if(--nready<=0)
break;
}
}
}
}
POLLCLI
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<string.h>
#include<sys/stat.h>
#include<unistd.h>
#include<errno.h>
#include<sys/types.h>
#include<fcntl.h>
#include<netinet/in.h>
#define MAXLINE 1024
#define SERV_PORT 56785
void str_cli(FILE*,int);
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
perror("socket not created");
exit(1);
}
if(argv[1]==NULL)
{
if(argv[2]==NULL)
{
printf("please specify the string to be send to the server\n");
exit(0);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERV_PORT);
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
if((connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)))<0)
{
printf("cannot connect to the server");
exit(1);
str_cli(stdin,sockfd);
close(sockfd);
exit(0);
}
void str_cli(FILE *fp,int sockfd)
{
char sendline[MAXLINE],recvline[MAXLINE];
while(fgets(sendline,MAXLINE,fp)!=NULL){
write(sockfd,sendline,strlen(sendline));
if((read(sockfd,recvline,MAXLINE))==0)
{
printf("str_cli:server terminated prematurely");
exit(0);
}
fputs(recvline,stdout);
UDPECHOSERVER
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
#define SERV_PORT 57886
#define MAXLINE 1024
dg_echo(sockfd,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
}
void dg_echo(int sockfd,struct sockaddr* pcliaddr,socklen_t clilen)
{
int n;
socklen_t len;
char mesg[MAXLINE];
for( ; ; )
{
len=clilen;
n=recvfrom(sockfd,mesg,MAXLINE,0,pcliaddr,&len);
sendto(sockfd,mesg,n,0,pcliaddr,len);
}
}
UDPECHOCLIENT
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<error.h>
#include<netinet/in.h>
#include<string.h>
#define SERV_PORT 56789
#define MAXLINE 1024
void dg_cli(FILE*,int,const struct sockaddr*,socklen_t);
if(argc!=2)
{
printf("usage:udpcli <IPaddress>");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERV_PORT);
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
sockfd=socket(AF_INET,SOCK_DGRAM,0);
dg_cli(stdin,sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
exit(0);
int n;
char sendline[MAXLINE],recvline[MAXLINE+1];
while(fgets(sendline,MAXLINE,fp)!=NULL)
{
sendto(sockfd,sendline,strlen(sendline),0,pservaddr,servlen);
n=recvfrom(sockfd,recvline,MAXLINE,0,NULL,NULL);
recvline[n]=0;
fputs(recvline,stdout);
}
UDPSTRREV
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
#define SERV_PORT 64187
#define MAXLINE 1024
}
}
UDPFSERV
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<fcntl.h>
int sd,retbind;
struct sockaddr_in sa,ca;
//if(argc!=4)
//printf("enter correct no of argumnets\n");
sd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&sa,sizeof(sa));
sa.sin_family=AF_INET;
sa.sin_port=htons(MYPORT);
sa.sin_addr.s_addr=htonl(INADDR_ANY);
retbind=bind(sd,(struct sockaddr*)&sa,sizeof(sa));
getfile(sd,(struct sockaddr*)&ca,sizeof(ca),argv[1]);
fd=creat(fn,777);
do
{
n=recvfrom(sd,msg,MAXLINE,0,pca,&len);
w=write(fd,msg,n);
}while(n>0);
//printf("file is sent");
UDPFCLI
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<fcntl.h>
int sd;
struct sockaddr_in sa;
if(argc!=4)
printf("enter correct no of argumnets\n");
bzero(&sa,sizeof(sa));
sa.sin_family=AF_INET;
sa.sin_port=htons(MYPORT);
inet_pton(AF_INET,argv[1],&sa.sin_addr);
sd=socket(AF_INET,SOCK_DGRAM,0);
sendfile(sd,(struct sockaddr*)&sa,sizeof(sa),argv[3]);
fd=open(fn,O_RDONLY,664);
do
{
nr=read(fd,buf,MAXLINE);
nw=sendto(sd,buf,nr,0,psa,sel);
}while(nr>0);
printf("file is sent");
TCPECHOSERVER
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<fcntl.h>
#define SERV_PORT 49613
#define MAXLEN 1024
int retbind,listenfd,connfd,n;
struct sockaddr_in servaddr,cliaddr;
char buff[MAXLEN];
socklen_t clilen;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
retbind=bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
if(-1==retbind)
{
perror("BIND ERROR");
exit(1);
}
listen(listenfd,MAXLEN);
printf("listen accepted");
for( ; ; )
{
clilen=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);
while((n=read(listenfd,buff,MAXLEN))>0)
{
write(listenfd,buff,n);
}
close(connfd);
}
}
UDPFCLI
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<error.h>
#include<netinet/in.h>
#include<string.h>
#define SERV_PORT 64290
#define MAXLINE 1024
void dg_ft(char*,int,const struct sockaddr*,socklen_t);
if(argc!=3)
{
printf("usage:udpcli <IPaddress>");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERV_PORT);
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
sockfd=socket(AF_INET,SOCK_DGRAM,0);
dg_ft(argv[2],sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
exit(0);
int fd,n_read,n_write,i;
char buffer[MAXLINE];
fd=open(filename,O_RDWR,777);
n_read=read(fd,buffer,100);
i=strlen(buffer);
n_write=write(sockfd,buffer,i);
printf("file content is sent to server");
}
TCPUDPMULTIPLEXING
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/select.h>
#include<sys/time.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<fcntl.h>
#include<signal.h>
#define MAXLINE 1000
#define SERV_PORT 56792
void sig_child(int);
void str_echo(int);
int max(int,int);
int main(int argc,char **argv)
{
int listenfd,connfd,udpfd,nready,maxfdpl,n;
char msg[MAXLINE];
pid_t childpid;
fd_set rset;
ssize_t len;
const int on=1;
struct sockaddr_in cliaddr,servaddr;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
listen(listenfd,5);
udpfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
bind(udpfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
signal(SIGCHLD,sig_child);
FD_ZERO(&rset);
maxfdpl=max(listenfd,udpfd)+1;
for(;;)
{
FD_SET(listenfd,&rset);
FD_SET(udpfd,&rset);
if((nready=select(maxfdpl,&rset,NULL,NULL,NULL))<0)
{
if(errno==EINTR)
continue;
else
printf("select error");
}
if(FD_ISSET(listenfd,&rset))
{
len=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&len);
if((childpid=fork())==0)
{
close(listenfd);
str_echo(connfd);
exit(0);
}
close(connfd);
}
if(FD_ISSET(udpfd,&rset))
{
len=sizeof(cliaddr);
n=recvfrom(udpfd,msg,MAXLINE,0,(struct sockaddr*)&cliaddr,&len);
sendto(udpfd,msg,n,0,(struct sockaddr*)&cliaddr,len);
printf("data received %s",msg);
}
}
}
void str_echo(int sockfd)
{
ssize_t n;
char buf[1024];
again:
while((n=read(sockfd,buf,1024))>0)
write(sockfd,buf,n);
if(n<0&&errno==EINTR)
goto again;
else if(n<0)
printf("str_echo:readerror");
else
printf("data is %s",buf);
}