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

Popular posts from this blog

கட்டற்றமென்பொருள் பற்றிய மாத மின்இதழ்

உலகெங்கிலும் உள்ள தமிழ் மக்களுக்கு கணினிதொழில்நுட்பத்தை பற்றி அறிமுகம் செய்யும் கணியம் என்ற புதிய மாத மின்னிதழை வெளியிடுவதில் பெருமகிழ்ச்சி அடைகிறோம். கணினி கற்க ஆங்கிலம் தடையாக இருந்த காலம் மாறி தொழில்னுட்பங்கள் யாவும் தமிழில் பெருகும் இந்த காலத்தில் மென்பொருள் பற்றிய நுட்பங்களை தமிழில் வழங்குவதில் பெருமை கொள்கிறோம். இந்த இதழின் கட்டுரைகள் : கட்டற்ற மென்பொருள் லினக்ஸ் பயனர் குழு – ஓர் அறிமுகம் உபுண்டு நிறுவுதல்

விண்டோஸை விட லினக்ஸ் சிறந்தது: பத்து காரணங்கள்

லினக்ஸ் பயன்படுத்த கடினம், விண்டோஸே சிறந்தது என கருதுபவர்களுக்காக 1. வைரஸ் அபாயம் கிடையாது: ஆம். பொரும்பாலான வைரஸ் நிரல்கள் விண்டோஸிற்காக எழுதப்படுபவை. லினக்ஸால் win32  நிரல்களை  செயல்படுத்த முடியாது. எனவே வைரஸ் வரும் என்ற கவலை வேண்டாம். 2. திற-மூலமென்பொருள் - விண்டோஸ் போல் அல்லாமல் லினக்ஸ் ஆனது திற-மூல-இயங்குதளம்(open-source).  எனவே நம்முடைய தேவைக்கு ஏற்ப நாம் இதனை மாற்றவே, பிறருக்கு அளிக்கவோ முழு சுதந்திரம் உண்டு.

சிடி/டிவிடிகளை காப்பி செய்யாதீர்கள்.

நாம் பொதுவாக டிவிடி படங்களை நம்முடைய கணினிகளில் டிவிடி டிரைவ்களில் போட்டு பார்ப்பது பழக்கம். நாம் நண்பர்களிடம் இருந்தோ அல்லது வேறுயாரிடமாவது இருந்தோ படங்களை வாங்கி உடனே பார்த்துவிட்டு தருவதற்கு முடியவில்லை என்றால் நாம் படங்களை காப்பி செய்து அதனை நம் கணினீயில் சேமிப்போம். அவ்வாறு சேமித்த படங்களை டிவிடி டிரைவில் போட்டு பார்ப்பது போன்றே சௌகரியமாக பார்ப்பது என்பது இயலாது. ஒவ்வொரு fileஐயும் நாம் விடியோ ப்ளேயரில் திறக்க வேண்டும். அதில் பலவிதமான fileகள் இருக்கும். நாம் ஒவ்வொன்றாக திறந்து நாம் பார்க்க வேண்டிய அந்த படத்தை பார்ப்பதற்குள் நேரம் ஆகிவிடும். சில fileகள் ஒழுங்காக காப்பி ஆகியிருக்காது. சில டிவிடிக்கள் காப்பி ஆக மறுக்கும்.