From ca5e9b53950f22f5bdac53341afd2b9955ca2832 Mon Sep 17 00:00:00 2001 From: Tanay Nigam Date: Wed, 28 Sep 2016 00:05:47 -0700 Subject: [PATCH] Add files via upload --- Client/Client.c | 108 +++++++++++++++++++++++++++++++++++++++++++++ Client/Client.out | Bin 0 -> 13707 bytes Client/file.txt | 38 ++++++++++++++++ Server/Server.c | 92 ++++++++++++++++++++++++++++++++++++++ Server/Server.out | Bin 0 -> 13484 bytes Server/rec.txt | 38 ++++++++++++++++ Server/receive.txt | 38 ++++++++++++++++ 7 files changed, 314 insertions(+) create mode 100644 Client/Client.c create mode 100644 Client/Client.out create mode 100644 Client/file.txt create mode 100644 Server/Server.c create mode 100644 Server/Server.out create mode 100644 Server/rec.txt create mode 100644 Server/receive.txt diff --git a/Client/Client.c b/Client/Client.c new file mode 100644 index 0000000..6cdcd88 --- /dev/null +++ b/Client/Client.c @@ -0,0 +1,108 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SERVER_PORT 5432 +#define MAX_LINE 80 + +int main(int argc, char * argv[]) +{ + FILE *fp; + struct hostent *hp; + struct sockaddr_in sin; + char *host; + char *fname; + char buf[MAX_LINE]; + char buf2[MAX_LINE]; + int s; + int slen; + struct timeval tv; + + if (argc==3) { + host = argv[1]; + fname= argv[2]; + } + else { + fprintf(stderr, "Usage: ./a.out host filename\n"); + exit(1); + } + hp = gethostbyname(host); // it is converting ip address fed into hosten and stored in hp + /* translate host name into peer’s IP address */ + if (!hp) { // Checks if there exists a hostent + fprintf(stderr, "Unknown host: %s\n", host); + exit(1); + } + + fp = fopen(fname, "r"); // we read a file with filename provided and gives read only access + if (fp==NULL){ + fprintf(stderr, "Can't open file: %s\n", fname); + exit(1); + } + + /* build address data structure */ + bzero((char *)&sin, sizeof(sin)); // same as server code + sin.sin_family = AF_INET; + bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length); //bcopy copies any data (strcpy copies just string). copying address of structure of host(ip address of server) into address of structure of client socket. + sin.sin_port = htons(SERVER_PORT); + + /* active open */ + if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { //same as server code + perror("Socket"); + close(s); + exit(1); + } + tv.tv_sec = 1; + tv.tv_usec = 0; + + srandom(time(0)); // generate random number + socklen_t sock_len= sizeof sin; + + + /* main loop: get and send lines of text */ + while(fgets(buf, 80, fp) != NULL){ // get values from the file fp and store in the socket buffer + buf2[0] = 0x00; + slen = strlen(buf); + buf[slen] ='\0'; // last value of the buffer at buffer address length+1 be added as /0 to indicate the end of buffer + if(random()>RAND_MAX/4){ + if(sendto(s, buf, slen+1, 0, (struct sockaddr *)&sin, sock_len)<0){ // if -1 then show error (socket id, buffer, length f the buffer+/0, flag, socket address, socket length) + perror("SendTo Error\n"); + exit(1); + printf(buf,"\n"); + }} + while(buf2[0]==0x00){ + if (setsockopt(s,SOL_SOCKET, SO_RCVTIMEO,&tv,sizeof(tv)) < 0) { + perror("PError"); + } + if(recvfrom(s,buf2,sizeof(buf2),0,(struct sockaddr *)&sin, &sock_len)<0){ + perror("Perror"); + } + if(buf2[0]==0x01){ + break; + } + else{ + if(random()>RAND_MAX/4){ + if(sendto(s, buf, slen+1, 0, (struct sockaddr *)&sin, sock_len)<0){ // if -1 then show error (socket id, buffer, length f the buffer+/0, flag, socket address, socket length) + perror("SendTo Error\n"); + exit(1); + }} + } + + } + } + + + *buf = 0x02; // send 0x02 as the last value to denote end of transmission + if(sendto(s, buf, 1, 0, (struct sockaddr *)&sin, sock_len)<0){ + perror("SendTo Error\n"); + exit(1); + } + fclose(fp); + close(s); //close socket and file +} + diff --git a/Client/Client.out b/Client/Client.out new file mode 100644 index 0000000000000000000000000000000000000000..709248fc1081ddc89c262ec9173ec3abcee8093c GIT binary patch literal 13707 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 a8qu7_`9&+wG`sjTmcjjIeepj9X6#?lffCgK literal 0 HcmV?d00001 diff --git a/Client/file.txt b/Client/file.txt new file mode 100644 index 0000000..58069a8 --- /dev/null +++ b/Client/file.txt @@ -0,0 +1,38 @@ + ooMMMMMMMooo + oMMMMMMMMMMMMMMMoo + MMMMMMMMMMMMMMo"MMMo + "MMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMo + MMMM""MMMMMM"o" MMMMMMM + MMo o" MMM" oo ""MMMMM + MM MMo MMM" MMoM "MMMMM + MMo"M"o" "" MMM" oMMMMM" + oMM M o" " o "o MMMMMM" + oM"o " o " o "o MMMMMMM + oMMoM o " M M "o MMMM"MMo + Mo " M "M "o" o MMMoMMMo + MMo " "" M " MMMMMMMo + oMM" "o o " MMMMMMMM + MMM" MMMMMMMMo + oMMMo "MMMMMMMMo + MMMMM o " " o" "MMMMMMMMMo + MMMMM " " "MMMMMMMMMo + oMMMM ""MMMMMMMMMo + oMMMM o o MMoMMMMMMM + MMMM o "MMMMMMMMMM + MMMM" o o o "MMMMMMMMMMo + oMMMMM MMMMMMMMMMo + MMM"MM "MMM"MMMMMMM + MMMMMM " o " MMMMMMMMMMM + "o "ooo o o o"MMMMMMMMoM" + " o "o "MMo " o" MMMMMMMM" + o "o" o o " MMMo o o""""MMMM"o" " + " o "o " o o" " MMMMoo " o "o M"" M "o " " + "o o" " o o" " " "MMMM" o M o "o" o" o" " o + M o M " o " " " " MM"" o oMo"o " o o "o " "o " + o" o " "o " " M " " o MMMMo"o " o o o o" o o" " + o" "o " o " " o o" M "oo ooMMMMMMM o "o o o " o o o " + M "o o" o" "o o o " o"oMMMMMMMMMMMMMMMMMMMo" o o "o "o o" + "" "o"o"o"o o"o "o"o"oMMMMMMMMMMMMMMMMMMo"o"o "o o"oo" + "" M Mo"o"oo"oM"" " MMoM M M M + """ """ " """ " diff --git a/Server/Server.c b/Server/Server.c new file mode 100644 index 0000000..eb26fff --- /dev/null +++ b/Server/Server.c @@ -0,0 +1,92 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SERVER_PORT 5432 +#define MAX_LINE 256 + +int main(int argc, char * argv[]) +{ + char *fname; + char buf[MAX_LINE]; + char buf2[MAX_LINE]; + struct sockaddr_in sin; + int len; + int s, i; + struct timeval tv; + char seq_num = 1; + FILE *fp; + + if (argc==2) { + fname = argv[1]; + } + else { + fprintf(stderr, "usage: ./client_udp filename\n"); + exit(1); + } + + + /* build address data structure */ + bzero((char *)&sin, sizeof(sin)); // cleaning -> makes sin all 0 + sin.sin_family = AF_INET; // sin belongs to AFINET family. socket sin is addressed to AFINET family. ipv_4 internet protocol + sin.sin_addr.s_addr = INADDR_ANY; // can take any legal address. You can add an ip address through this command. INADDR_ANY is 0 + sin.sin_port = htons(SERVER_PORT); // obtains server port (5432) htons converts integer port number to hardware port number. uses big endian or small endian according to the system. + + /* setup passive open */ + if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { //PF_INET used, although AFINET can be used too. PFINET addresses a wider range of protocol family. this command creates a socket s and gives it arguments. SOCK_DGRAM uses udp datagram. And protocol number is 0 in usual cases. + perror("simplex-talk: socket"); + close(s); + exit(1); // when error exist socket() returns value -1. hence the if statement. and exit the program. + } + if ((bind(s, (struct sockaddr *)&sin, sizeof(sin))) < 0) { // bind (socket file descriptor (int), sin memory location, size of sin). technically assigning name to the socket. + perror("simplex-talk: bind"); + close(s); + exit(1); // error if -1 is returned. + } + +// now the server connection is established + socklen_t sock_len = sizeof sin; // getting size of sin and storing it + srandom(time(NULL)); // random number generated + + fp = fopen(fname, "w"); //opening a file input later. we want to open and write the file. + if (fp==NULL){ + printf("Can't open file\n"); // if fp is still NULL, then we couldn't open the file. + exit(1); + } + + while(1){ + len = recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *)&sin, &sock_len); //the server is now listening. it recieves messages from socket.(socket name, buffer, size of buffer, socket address and socket length) + + if(len == -1){ + perror("PError"); + } + + else if(len == 1){ // the last value after transmission completion writes at buffer address 0x02. hence after reading it, transmission completes. + if (buf[0] == 0x02){ + printf("Transmission Complete\n"); + break; + } + else{ // if the last value after transmission completion writes at some other value, there is an error. + perror("Error: Short packet\n"); + } + } + else if(len > 1){ // here the server receives data from the buffer of the socket and writes it in a file fp. + if(fputs((char *) buf, fp) < 1){ + printf("fputs() error\n"); + }} + *buf2 = 0x01; + if(sendto(s,buf2,1,0,(struct sockaddr *)&sin, sock_len)<0){ + perror("Sendto Error\n"); + exit(1); + } + } + fclose(fp); //it is necessary to close filename + close(s); // it is necessary to close socket or else ram fills fast and it may cause crashes. +} + diff --git a/Server/Server.out b/Server/Server.out new file mode 100644 index 0000000000000000000000000000000000000000..aa17168d4bc25204bf78f0781fec9d52692f171b GIT binary patch literal 13484 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 D%0Daf literal 0 HcmV?d00001 diff --git a/Server/rec.txt b/Server/rec.txt new file mode 100644 index 0000000..58069a8 --- /dev/null +++ b/Server/rec.txt @@ -0,0 +1,38 @@ + ooMMMMMMMooo + oMMMMMMMMMMMMMMMoo + MMMMMMMMMMMMMMo"MMMo + "MMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMo + MMMM""MMMMMM"o" MMMMMMM + MMo o" MMM" oo ""MMMMM + MM MMo MMM" MMoM "MMMMM + MMo"M"o" "" MMM" oMMMMM" + oMM M o" " o "o MMMMMM" + oM"o " o " o "o MMMMMMM + oMMoM o " M M "o MMMM"MMo + Mo " M "M "o" o MMMoMMMo + MMo " "" M " MMMMMMMo + oMM" "o o " MMMMMMMM + MMM" MMMMMMMMo + oMMMo "MMMMMMMMo + MMMMM o " " o" "MMMMMMMMMo + MMMMM " " "MMMMMMMMMo + oMMMM ""MMMMMMMMMo + oMMMM o o MMoMMMMMMM + MMMM o "MMMMMMMMMM + MMMM" o o o "MMMMMMMMMMo + oMMMMM MMMMMMMMMMo + MMM"MM "MMM"MMMMMMM + MMMMMM " o " MMMMMMMMMMM + "o "ooo o o o"MMMMMMMMoM" + " o "o "MMo " o" MMMMMMMM" + o "o" o o " MMMo o o""""MMMM"o" " + " o "o " o o" " MMMMoo " o "o M"" M "o " " + "o o" " o o" " " "MMMM" o M o "o" o" o" " o + M o M " o " " " " MM"" o oMo"o " o o "o " "o " + o" o " "o " " M " " o MMMMo"o " o o o o" o o" " + o" "o " o " " o o" M "oo ooMMMMMMM o "o o o " o o o " + M "o o" o" "o o o " o"oMMMMMMMMMMMMMMMMMMMo" o o "o "o o" + "" "o"o"o"o o"o "o"o"oMMMMMMMMMMMMMMMMMMo"o"o "o o"oo" + "" M Mo"o"oo"oM"" " MMoM M M M + """ """ " """ " diff --git a/Server/receive.txt b/Server/receive.txt new file mode 100644 index 0000000..58069a8 --- /dev/null +++ b/Server/receive.txt @@ -0,0 +1,38 @@ + ooMMMMMMMooo + oMMMMMMMMMMMMMMMoo + MMMMMMMMMMMMMMo"MMMo + "MMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMo + MMMM""MMMMMM"o" MMMMMMM + MMo o" MMM" oo ""MMMMM + MM MMo MMM" MMoM "MMMMM + MMo"M"o" "" MMM" oMMMMM" + oMM M o" " o "o MMMMMM" + oM"o " o " o "o MMMMMMM + oMMoM o " M M "o MMMM"MMo + Mo " M "M "o" o MMMoMMMo + MMo " "" M " MMMMMMMo + oMM" "o o " MMMMMMMM + MMM" MMMMMMMMo + oMMMo "MMMMMMMMo + MMMMM o " " o" "MMMMMMMMMo + MMMMM " " "MMMMMMMMMo + oMMMM ""MMMMMMMMMo + oMMMM o o MMoMMMMMMM + MMMM o "MMMMMMMMMM + MMMM" o o o "MMMMMMMMMMo + oMMMMM MMMMMMMMMMo + MMM"MM "MMM"MMMMMMM + MMMMMM " o " MMMMMMMMMMM + "o "ooo o o o"MMMMMMMMoM" + " o "o "MMo " o" MMMMMMMM" + o "o" o o " MMMo o o""""MMMM"o" " + " o "o " o o" " MMMMoo " o "o M"" M "o " " + "o o" " o o" " " "MMMM" o M o "o" o" o" " o + M o M " o " " " " MM"" o oMo"o " o o "o " "o " + o" o " "o " " M " " o MMMMo"o " o o o o" o o" " + o" "o " o " " o o" M "oo ooMMMMMMM o "o o o " o o o " + M "o o" o" "o o o " o"oMMMMMMMMMMMMMMMMMMMo" o o "o "o o" + "" "o"o"o"o o"o "o"o"oMMMMMMMMMMMMMMMMMMo"o"o "o o"oo" + "" M Mo"o"oo"oM"" " MMoM M M M + """ """ " """ "