Skip to main content

FTP simulation to read the file contents

server.c

#include "stdio.h"
#include "string.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "arpa/inet.h"
#include "netinet/in.h"
#define SA struct sockaddr

int main(int argc,char** argv) {
    int sockfd;
    int n=0,clilen;
    char fname[20],content[2000],ch;
    FILE *fp;
    struct sockaddr_in servaddr,cliaddr;

    if(argc!=2) {
    printf("usage ./server PORT\n");
    return 0;
    }

    //create socket
    sockfd = socket(AF_INET,SOCK_DGRAM,0);

    //fill structure
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(atoi(argv[1]));
    servaddr.sin_addr.s_addr = INADDR_ANY;

    //bind
    bind(sockfd,(SA*)&servaddr,sizeof(servaddr));

    //getting filename from client
    clilen=sizeof(cliaddr);
    recvfrom(sockfd,fname,sizeof(fname),0,(SA*)&cliaddr,&clilen);

    //open the file for reading 
    fp = fopen(fname,"r"); 

    while(1) {
    ch = fgetc(fp);
    if(ch!=EOF) {
        content[n++]=ch;
    }
    else
        break;
    }
    fputs(content,stdout);
    //send the file content to client
    sendto(sockfd,content,sizeof(content),0,(SA*)&cliaddr,sizeof(cliaddr));

    return 0;
}

client.c

#include "stdio.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "arpa/inet.h"
#include "netinet/in.h"
#include "string.h"
#define SA struct sockaddr

int main(int argc,char** argv) {
    int sockfd,len;
    struct sockaddr_in servaddr;
    char fname[20],content[2000];

    if(argc!=3) {
    printf("usage ./client PORT FILENAME\n");
    return 0;
    }
    strcpy(fname,argv[2]);

    //create socket
    sockfd = socket(AF_INET,SOCK_DGRAM,0);

    //fill structure
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(atoi(argv[1]));
    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    //send filename
    sendto(sockfd,fname,sizeof(fname),0,(SA*)&servaddr,sizeof(servaddr));

    //receive the file content from server
    len=sizeof(servaddr);
    bzero(content,sizeof(content));
    recvfrom(sockfd,content,sizeof(content),0,NULL,NULL);

    //print the file contents
    printf("contents of the %s:\n\n",fname);
    fputs(content,stdout);

    return 0;
}

Comments