Sie sind auf Seite 1von 6

1.concurrent http client.c #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<netdb.h> #include<string.

h> struct httpreq { char method[10]; char url[20]; float version; char msg[100]; }; int main() { int sd,size; char recvmsg[1024],send_filename[1024],send_method[1024];; struct sockaddr_in client; struct httpreq req; memset(&client,0,sizeof(client)); sd=socket(AF_INET,SOCK_STREAM,0); if(sd==-1) perror("socket"); client.sin_family=AF_INET; client.sin_addr.s_addr=inet_addr("127.0.0.1"); client.sin_port=htons(3623); if(connect(sd,(struct sockaddr *) &client,sizeof(client))==-1) perror("connect"); printf("Enter the method name\n"); scanf("%s",req.method); printf("Enter the file name:\n"); scanf("%s",req.url); req.version=1.1; strcpy(req.msg,"hi"); send(sd,(struct httpreq *)&req,sizeof(req),0); printf("\nHTTP request sent"); size=recv(sd,recvmsg,1024,0); recvmsg[size]='\0'; printf("\n%s",recvmsg); close(sd); } 2.concurrent http server.c #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<netdb.h> #include<string.h> #include<fcntl.h> #define PORT 3636 #define DIRSIZE 8192

struct httpreque { char methodname[10]; char urlname[20]; int version_name; char message[10]; }; struct response { char file_contents[1024]; }; main() { int sd,sd_current; int fd,n,pid; int addrlen; char msg[1024]; struct sockaddr_in server,client; struct httpreque clientreq; struct response respmsg; sd=socket(AF_INET,SOCK_STREAM,0); if(sd==-1) { perror("socket"); } memset(&server,0,sizeof(server)); server.sin_family=AF_INET; server.sin_addr.s_addr=inet_addr("127.0.0.1"); server.sin_port=htons(3623); if(bind(sd,(struct sockaddr *)&server,sizeof(server))<0) { puts("bind error"); exit(1); } listen(sd,1); puts("waiting"); while(1) { addrlen=sizeof(struct sockaddr_in); sd_current=accept(sd,(struct sockaddr *)&client, (socklen_t *)&a ddrlen); if(sd_current==-1) { perror("accept"); } pid=fork(); if(pid==0) { if(recv(sd_current,(struct httpreque *)&clientreq,sizeof(clientr eq),0)==-1) perror("recv"); puts("received"); printf("\n%s",clientreq.methodname); if(strcmp(clientreq.methodname,"get")==0) { printf("\nThe method is %s",clientreq.methodname); fd=open(clientreq.urlname,O_RDONLY); if(fd<0) perror("open"); n=read(fd,respmsg.file_contents,1024);

write(STDOUT_FILENO,respmsg.file_contents,strlen(respmsg .file_contents)); printf("\nFile contents sent"); send(sd_current,respmsg.file_contents,strlen(respmsg.fil e_contents),0); } else { printf("\nMethod is :post"); send(sd_current,"post",strlen ("postsent"),0); fd=open(clientreq.urlname,O_RDONLY); if(fd<0) perror("open"); n=read(fd,respmsg.file_contents,1024); write(STDOUT_FILENO,respmsg.file_contents,strlen(respmsg .file_contents)); printf("\nFile contents sent"); send(sd_current,respmsg.file_contents,strlen(respmsg.fil e_contents),0); } } } close(sd); close(sd_current); } 3.ftpserver.c #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<errno.h> #include<fcntl.h> #include<sys/stat.h> #include<sys/socket.h> #include<sys/types.h> #include<arpa/inet.h> #include<string.h> #include<netinet/in.h> int main() { int sendfd,readfd,sock,sock2,fd,connected,bytes_received,true=1; char send_data[1024],recv_data[1024],read_data[1024]; struct sockaddr_in server_addr,client_addr,server2_addr; struct hostent *host2; int fd2; char buff[2048]; int sin_size; if((sock=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } server_addr.sin_family=AF_INET; server_addr.sin_port=htons(3623);

server_addr.sin_addr.s_addr=INADDR_ANY; bzero(&(server_addr.sin_zero),8); if(bind(sock,(struct sockaddr*)&server_addr,sizeof(struct sockaddr))==-1 ) { perror("unable to bind"); exit(1); } if(listen(sock,5)==-1) { perror("listen"); exit(1); } printf("\nwaiting!!"); fflush(stdout); sin_size=sizeof(struct sockaddr_in); while(1) { connected=accept(sock,(struct sockaddr*)&client_addr,&sin_size); printf("\nGot connection!!"); bytes_received=recv(connected,recv_data,1024,0); recv_data[bytes_received]='\0'; printf("\nRECEIVED DATA=%s",recv_data); fd2=open("f1.txt",O_RDWR); fflush(stdout); if((sock2=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("Socket"); exit(1); } server2_addr.sin_family=AF_INET; server2_addr.sin_port=htons(4623); server2_addr.sin_addr.s_addr=INADDR_ANY; bzero(&(server2_addr.sin_zero),8); printf("\nNew connection initiated..!\n"); if(connect(sock2,(struct sockaddr *)&server2_addr,sizeof(server2_addr))< 0) { printf("Yuppie!\n"); perror("Connect"); exit(1); } printf("success:D\n"); fd2=open("f1.txt",O_RDWR); close(STDOUT_FILENO); dup(sock2); execlp(recv_data,recv_data,(char *)0); read(fd2,buff,sizeof(buff)); send(sock2,buff,sizeof(buff),0); printf("Sent\n"); } printf("Done"); close(sock); close(sock2);

return 1; } 4.ftpclient.c #include<sys/socket.h> #include<sys/types.h> #include<netinet/in.h> #include<netdb.h> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #include<errno.h> int main() { int sock,sock2,bytes_received,connected2,sin_size2; char send_data[1024],recv_data[1024],writ_data[1024]; struct sockaddr_in server_addr,client_addr,server2_addr; if((sock=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("Socket"); exit(1); } server_addr.sin_family=AF_INET; server_addr.sin_port=htons(3623); server_addr.sin_addr.s_addr=INADDR_ANY; bzero(&(server_addr.sin_zero),8); if(connect(sock,(struct sockaddr *)&server_addr,sizeof(server_addr))<0) { perror("Connect"); exit(1); } gets(send_data); send(sock,send_data,strlen(send_data),0); printf("\nsent");

if((sock2=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } server2_addr.sin_family=AF_INET; server2_addr.sin_port=htons(4623); server2_addr.sin_addr.s_addr=INADDR_ANY; bzero(&(server2_addr.sin_zero),8); if(bind(sock2,(struct sockaddr*)&server2_addr,sizeof(struct sockaddr))== -1) { perror("unable to bind"); exit(1);

} if(listen(sock2,5)==-1) { perror("listen"); exit(1); } printf("\nwaiting!!"); fflush(stdout); sin_size2=sizeof(struct sockaddr_in); connected2=accept(sock2,(struct sockaddr*)&client_addr,&sin_size 2); printf("\nGot connection from server!!"); bytes_received=recv(connected2,recv_data,1024,0); recv_data[bytes_received]='\0'; printf("\nRECEIVED DATA=%s",recv_data); close(sock); close(sock2); }

Das könnte Ihnen auch gefallen