From 4acfad7d45fc8e61001238b1414ae4b462721f42 Mon Sep 17 00:00:00 2001 From: Gianluca <gianlucamastrolonardo10@gmail.com> Date: Thu, 23 May 2024 19:32:12 +0200 Subject: [PATCH] da finire --- Reti/Laboratorio/Assigment5/Calculator/client | Bin 0 -> 16800 bytes .../Assigment5/Calculator/client.c | 134 ++++++++++++++++++ .../Assigment5/Calculator/makefile | 10 ++ Reti/Laboratorio/Assigment5/Calculator/server | Bin 0 -> 16840 bytes .../Assigment5/Calculator/server.c | 131 +++++++++++++++++ 5 files changed, 275 insertions(+) create mode 100755 Reti/Laboratorio/Assigment5/Calculator/client create mode 100644 Reti/Laboratorio/Assigment5/Calculator/client.c create mode 100644 Reti/Laboratorio/Assigment5/Calculator/makefile create mode 100755 Reti/Laboratorio/Assigment5/Calculator/server create mode 100644 Reti/Laboratorio/Assigment5/Calculator/server.c diff --git a/Reti/Laboratorio/Assigment5/Calculator/client b/Reti/Laboratorio/Assigment5/Calculator/client new file mode 100755 index 0000000000000000000000000000000000000000..9370d342872f7b132d6304237f6d97e5426ea6a7 GIT binary patch literal 16800 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 Jd=5U5{Wp0BX?6er literal 0 HcmV?d00001 diff --git a/Reti/Laboratorio/Assigment5/Calculator/client.c b/Reti/Laboratorio/Assigment5/Calculator/client.c new file mode 100644 index 0000000..02a6abf --- /dev/null +++ b/Reti/Laboratorio/Assigment5/Calculator/client.c @@ -0,0 +1,134 @@ +#include <arpa/inet.h> +#include <netdb.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/socket.h> +#include <sys/time.h> +#include <sys/types.h> +#include <unistd.h> + +int main(int argc, char *argv[]) { + char valueToSend[256] = {'\0'}; + char valueToReceive[256] = {'\0'}; + char iterationsServer[256] = {'\0'}; + + int iterations; + + struct timeval startTime, endTime; + double timeServ; + + printf("Inserire il numero di iterazioni: "); + scanf("%d", &iterations); + if (!iterations) { + exit(1); + } + snprintf(iterationsServer, sizeof(iterationsServer), "%d", iterations); + + int simpleSocket = 0; + int simplePort = 0; + int returnStatus = 0; + char buffer[256] = ""; + struct sockaddr_in simpleServer; + + if (argc != 3) { + fprintf(stderr, "Usage: %s <server> <port>\n", argv[0]); + exit(1); + } + + /* create a streaming socket */ + simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + + if (simpleSocket == -1) { + fprintf(stderr, "Could not create a socket!\n"); + exit(1); + } else { + fprintf(stderr, "Socket created!\n"); + } + + /* retrieve the port number for connecting */ + simplePort = atoi(argv[2]); + + /* setup the address structure */ + /* use the IP address sent as an argument for the server address */ + // bzero(&simpleServer, sizeof(simpleServer)); + memset(&simpleServer, '\0', sizeof(simpleServer)); + simpleServer.sin_family = AF_INET; + // inet_addr(argv[2], &simpleServer.sin_addr.s_addr); + simpleServer.sin_addr.s_addr = inet_addr(argv[1]); + simpleServer.sin_port = htons(simplePort); + + /* connect to the address and port with our socket */ + returnStatus = connect(simpleSocket, (struct sockaddr *)&simpleServer, + sizeof(simpleServer)); + + if (returnStatus == 0) { + printf("Connect successful!\n"); + } else { + fprintf(stderr, "Could not connect to address!\n"); + close(simpleSocket); + exit(1); + } + + // Inviando il numero di iterazioni al server + write(simpleSocket, iterationsServer, strlen(iterationsServer)); + + // Avvio il timer + gettimeofday(&startTime, NULL); + + // Aspettando l'ACK + read(simpleSocket, valueToReceive, sizeof(valueToReceive)); + if (strcmp(valueToReceive, "ACK") != 0) { + fprintf(stderr, "Invalid ACK"); + exit(0); + } + printf("%s\n", valueToReceive); + + int i = 0; + while (i < iterations) { + int num1; + int num2; + char operator; + + // Pulisco i buffer + memset(&valueToReceive, '\0', sizeof(valueToReceive)); + memset(&valueToSend, '\0', sizeof(valueToSend)); + + printf("Inserire il valore da voler inviare al server con il formato num " + "num operator: "); + scanf("%d %d %c", &num1, &num2, &operator); + if (valueToSend[0] == '\0') { + fprintf(stderr, "Impossibile inviare una riga vuota!"); + } else { + write(simpleSocket, valueToSend, strlen(valueToSend)); + read(simpleSocket, valueToReceive, sizeof(valueToReceive)); + printf("\n\nEcho: %s\n", valueToReceive); + ++i; + } + } + + // Invio il BYE + memset(&valueToSend, '\0', sizeof(valueToSend)); + snprintf(valueToSend, sizeof(valueToSend), "BYE"); + write(simpleSocket, valueToSend, sizeof(valueToSend)); + + // Aspettando l'ACK + read(simpleSocket, valueToReceive, sizeof(valueToReceive)); + if (strcmp(valueToReceive, "ACK") != 0) { + fprintf(stderr, "Invalid ACK"); + exit(0); + } + printf("%s\n", valueToReceive); + + close(simpleSocket); + + // Spengo il timer + gettimeofday(&endTime, NULL); + + timeServ = (endTime.tv_sec + (endTime.tv_usec / 1000000.0)) - + (startTime.tv_sec + (startTime.tv_usec / 1000000.0)); + + printf("Service Time: %.2f", timeServ); + + return 0; +} diff --git a/Reti/Laboratorio/Assigment5/Calculator/makefile b/Reti/Laboratorio/Assigment5/Calculator/makefile new file mode 100644 index 0000000..f0ddf27 --- /dev/null +++ b/Reti/Laboratorio/Assigment5/Calculator/makefile @@ -0,0 +1,10 @@ +all: client server + +client: client.c + gcc client.c -o client + +server: server.c + gcc server.c -o server + +clean: + rm -f client server diff --git a/Reti/Laboratorio/Assigment5/Calculator/server b/Reti/Laboratorio/Assigment5/Calculator/server new file mode 100755 index 0000000000000000000000000000000000000000..ca77de42d76d51f4fb7d79f062bba3f5669284ca GIT binary patch literal 16840 zcmeHOe{dAneSZ=V1Oar!kjgkViyLBy!&$<>5G4vHgkY6`AsDrGQgS-!R_LbpL%!Ry zh1*aOMX7IO&B)W5GHs><oz@{^&y-Hn384l{c4}c-r{Mm=b)8W%@l@y7seITCA-1od z?|bjNySLmnO{f2K=AK6P{eC~+AMe+`_xA1X`<>3+JL~J}1gCl8GeSx?DI}s54Xtb; zL_};AOYyr}+$KH%cs~9kTJ5J->Xm|NgSMLoN`6hmRG}YHuwcq1BuaikX>PI7Fcl#s zlivbjwd|+uOOzc`);swbN-uo$8W|ul_4-lUgf>XE2(?vGq3dmE%6`;b<Y#C<L;EqE z)A=#w_M|qU|E)TnpEg5BiK*XjK>PXW4&^48QXZ7<ea(*lZ}Qux{XVir#qrZk3KmQ` zzt6*u+U0+mxSRLu{DS&nPG6r)b@Ph5l8N3eo9;@+HzX73{LqG>ty?y1*%Z!Y!W(4~ zs9XmA>6+SgPq#prNy4~0>xY%h@kqBq>&aeRTp3>YhduwY`fIOm+jZ>bSAY2Icb+2~ zDmVE^8*Q(P2uV;r;uidqjckv)qu@k6VKi1QTi;84vNXoShIAEaC8Q5kAWC=^#HfPr z1y;@eSOETo06ZCh-xYvo1MvO;+zh}E1mM)p)#|l90KX#u4+r4i2X5fspS}*DTE1Ti zz+(Y;Apoc8qFVfk0Q~U){7v8n{{5)~K(+W=0`NNExBG)Y{w@437psI3QA(bVL^Rqr z6pQvJ(y?UXVM}DKSR5EeV_!69$Fg=b6-%T=&d&Cw21Wm1Hj%dbMK06#o0ctNb|xWm z*;qO*QdTMlWH4{%L|-zKv&bcBrA2Q7+5tP0PRie$$fY@m9k;Sskxb-l*v0z#tU+5? zLkU~-Ka@?_mar2k3+moJng+IrUAw!scSJXaH-<Mm{N0;GwClj0C?Z*hC{Xsmo{nTD zZ5@d9CM{ItP%4ww6^Sa-s)lHkdW`XTfq#CTE35Xbga1jeJP+nqB^J@_^rXhV_1G~? zANAtf%G_C>xF2Tp`roA2AI48;ydk0-8E5&*HigsNM19X`#)H>02s-P*xvZp~^WaS$ z`)eMY<~&Y(9npO3o&45m`-Q-HZYG~*4^Hzgr>!1b-Y;lH#DmLuSL3D!r#v|A^WfY@ zq`S|9qeGn3<H7YUjMNQy@DDoHLJWFved{8%Lmqso$9~v@FZ1A!c<@FKKH<Tad+_5P z+&d4P@ZkCqkzS`fIIVx2PJ3`#lQ^C6;2&lXbkc+WiU+^o!Eg59mpu3?4_;$yEl_KL zS_{-#K()Zt#@nu&BX2aAV+&r!y|_6#Y1fx8nIqqAcupFWH<xgWTPm-;3evb*ko^E@ zO2r?P%jF3v(?VY=UUp<!;7i3RN2Z0hRQwA^rUkcDJn6`^(3XmiIWjG<rQ%UXriHas ze87=uK`j+yj!X+_srY$ErUkTAY<FZ@I7`JAN2Ud{R9xf8v{06c%N>~($WpP+k!fKp z72kTF>q|E(sJ|oA0*U%NGA)d#za!Ivi26G+Erh7QBhvzi`m>DIJ}6szhmh?J`OA15 z(74)_^FBG{lP#Zo&?k5M<UKyQ(<it2<jp>LgHK-TlW+COD}C}(pS-{)zxRpC`oH6o z-}K3^`Q%r9@;`aymN&Z!m%n5derS&TXl~zu&X&oR7tHati|Cc|%D;r=+x_9j)nA2( z0W#k9G7xio!AnFwdCgvlp>vFQ44p;gna0(_WcQq=u>YpC-~1;;*1vBS=FF*|Y%`~> z%`@wsH!r_$uRs7x2WTkI^vix`e;QxIZC{33<nQb@N7}X%YZhL!mzZO1J0Z-z@Lst* z8^^`^{DN-CbqC?=<WK&^hoB^;8-C`|H+nEW3+JAKn_2j)6CiPOZ2sDHGH&O!mdWYS zNq`W=^ynFf`>y6jq^CHtNHO(CHkxCj6vZ41p(cNOCyF<|^eK!vv+zB$Fnxvs&AttT zXK0?7{VXo?voylbllTnH6|?=o3NqJ`bCh>EzX73!DO6$VEZyfzW3+m|j5|HM0v;;f zb(!^od$lo*O*Zb<#{UizUD|w%OFJ@&Ne}U-XHP+0kTpGej_TWp&Hj-kil4ziJn{ev zbM@n@Fl#;W7wY)G3nx{W6mhT+vo}%D>DhmK7oGDEc(d=4nRw}yKYFa)oO<1uy1u9| zHTARA>n|oQ{ynC*^%n}yj(;VDj8#F*@zG0gIxA~K@u-|Vh}AzW74<^p(gvt7`j0Rj zlND(E_9P5{`g0f-Mqi?A$Hytqm~31b4!r`C-<OWmrz7WN&*pcblFLxZvB#+m(1m+3 zje5JV1uiPid77{hWScKYIsf2~TM=e@{f!-WtBf{1`$Z=T0{k%wsv2$+V0eyePr8-o zUMypJr|Pfqdd3~k>)_1k(HRt4Hq`X!tY)W2FF4${z)@qua?Z89=CT48l=g3M*^tXN zxvb%`>s+?kWw*L)#AQvF-RH9RxonTi4!G=~%MQ8hu**K;vJ)<Q++|O=>?xN$?XqWF zcG6`pxa=jDz2dSnE<5Y8b1r+$Wd%kxx39~FT(-$&4VPW#vdu2L)ny|tYr5<{m%Yzr zdt7$FWd~h$$YDE&Rbe|H(R4!7<C>n(^pvKjHI>tyIo&y_<qMi#()5a^Gn&pyI{r9a zpct%l8LL62#_7A)Xn@moJaUeH%Xu1L{U5t=fR!+((lEIW4;2AI8w54L{sA1~Q|FAy zcxUPPjLPH=sT(C7MK}(zF#310B=lQ&9ux1MtMF<zf8wVUOpYXTeC3l+ombKHY=2DZ z$7!V9kXb8q)1yyAMKv!zfgcKmyk&{b%l1GivTh!giu-l&YBf2iopepU|DRN&XSt|_ z%P4K#4W*qWD>O~D(mo2^h%9a0m?WQ)4b%82U2Ij$eO5-3ZBtq9lRBGf<^D76MCBe| z*^BwrEc`R|#Zyq=#)6i^2R=&Z)Y&CyA)XsQEiI>K7ogs%pMNYPEojz?r{7V<MBS+F zKr4Id4XLkQ_X+4!_n{zHAr#MFr(UC53Atx*b_vvHwNz_?S_}MtYXN#sK&d+yJ7l#Q zYjeh@2QyjwGmAw>CZCKO>5Ogk;U$c188Jh>W?8dX+$-O=Xhj@=*as&gmCxBmuVp0C z242D(vWzdbG$Vb&XxRvIaIx5qmoG+NCN-F}Y%6YL(gtN_tfdfce)NjQuro$19?x32 z9O+_dDu{YDLvBt<v_`$HLFjba>a!D>G<n^VPg&WFfmb)#*u%gQs9$`sXz%!(So?5Z zY`?!#bfq7}d#1Pnez91DUt@n~M`zcsbz-Y6>Ta3$sb)}2nqvNcV4DPL&y~xMf_@eB zPeFh5R=K<z^u<!S{4^*(<F0#nzo;7u)!njWVZ#I#TEgkQ#02a=1}b(e3=zScF5h(@ z|4F$#NE@PMp`FW`KHK=ghZ=^(wpFbkzx$)NlO6g02L5MI4(UiB65%%fuK@2Mf1R2@ zsho>YuC4|!oy$UBtM6Ef#jloXEl_KLS_{-#pw<Gl7O1sAtp#c=P-_9*0{q<*f9J%v z)F-um3AdEK316z^P5PrF{sx7=_vLSt=oXw3e~ZH3RcSZD`gh(hXUOg}y)#9ky$7WU zedEse?^m=QTQ8Xw>Vo2pgiLh*Ps#gj4awR~gtn2Sz9%IbQrkdh|3a@^De<>9GrE9` zH)xs5Egx&bo?gXL;{0z@qEkOSte5peaiuFBcuDz+4veR2te2kHW=Z+D*8fb)Tn`=o z|BUc=*8YIay1yfu?$fkK(?Ly#HJ#A(gr=u8oz(P_rZbw(X^M{`WeRC(Xxgl4MALnm z_Gmh&>9D5$^8X^aA)+jHb#$~E>$-dMX*+MUw1hW>n>V!NrPy+0<Hm6Fru7>B?<3OX zIA6RapYeJv>H4UH=26{&hE~!m@@n>U{nU$)X!d?o2F%cSj}O0F<2-&L%G8D5I*h(` z5hd&4BDy91VZq~3X@&T0FqALP2aG==?N>VAOEUfqFxAQ*RIk%A&I<AN8jj%7YH{eX zcpXNg|N5MkZZ`@3j-I3ZtF&)&#yR72V7%Y$F}@THVzA($uSy)VTEqi_T@SokoWI6A zQVnl~eMsCaLcTcd6sLZ<;Q5nt*%c7~3jz4M0eCV1KN^7lUI6|?0DdL_e<1*W1vs^X zzddII?0+7BH=>;lZY&SI4fyi<n+1<&R^3TB^^A6!uNAGptM%9C0`M;Z4`CcNM>w*g zKal0bB&Nrse8vS;pSJh+dq&0&iK4cb&!}K;2jn{%fFBRQzZrm^4ZvRnPVMF|=gYti zRmF<mtH5usK$Nfy^V)~%ahJgJxwg3|+vi4y6|k@N9sC^>=SFiJyy?r@E#VA4C6Dzc zqIT?%0Fblu{r%xS;eK`=wNp`i_nx+Lu#9J-hmx7zSTY*7Gud1;mLC$%Q`m5Gbqo3i zKM{>(v$4ZbD{W^Fi~ejZWkuupRO&EXJW>>vc7<uq%06giQKD#c=l=FRozc#Fc0}>P z`;PnXY2VY;0T>5dqMfGJnmhK3=&s#+x3}+(?%lcb-p&Kj1MS;)cf!N}>3@VjyZ;5B z+S8Z+jxBwnAGP8!J0@hc^kIMsJ)H@t^x%^LH<%?W5Ovg`0+J^VDiAuyPyxte3Ka<Y z2?bP#1M~rh3cWt;P=Wam6hz~>OmqMTAn33`*IopRC(_Y;&Wg*^3l+ZVX?g{Oj;7NV zy}6t&hCFOR&*Ll1)YJA#2uCj}06I8P0jNV16;L#a(-C}W(6NcCXCW$2gj5Eg3lD8Y z2RAAd>is|kB*MAFDLd8+YG)N4U=D{!tn8o&<0XR?K9tUf2eX+$D{CM2K)v|{PJ<=l z8fxF(wSh*TG#`lN21Gc1IE^e6wX;ftQINx{hYBGIUDis*$U$?1Nn3<vWx`;?hcXa} z$yt3OY+FMRX*j|<Bd_AHHJ}IJKpfFnQZdv>R36MDt5_<5V9FgmEW(%qQW)9QW|?0a zqkRshINUR-<UiNR`y8#7w#*a#Rs7Q}KKloqUnE;fyzfww5On^?>+e6uNbgy^iPt~I z=>E{_&-bTH4K~!&@Biz-@#dYDHJNz-#&n&=dH?1we++usyRkp-@0gy^3MwPDGyC&C zD*+5khU3rsMW(zzgo#WP!<!y}KzlFFpZ8l#TeUHlpY50)fu8nqEc1SjX|wkCmtVtT z91OK7`#bwfT~Xd&a{m7M|AF@3t^>|!1E##cC4Xu&zyC>K)FvF?S-<r<&ii<n$mH+; zuLJe^8`_Vle7C24iSX?K({K3vC-gp!Dcf-fmYJUR`Jd4KOnZDC&VEe4<MZeHIHntE z<K{{1$Ivriy!Ge%d8YiFgzf$9_cz*~`(GH^Qqxtw@^k-bEAb*2GGTw-4>8@uhMM~G zf5qp&Z;di!ddlbT&;K>(>9cVfgOvFB51%{s+q2B{E%-FzpZ$41+O&b9x!0?bT$%mf zgMzMI_UC;fpCjk<;xzs!u^;#2lfbC`*q@&dh3+D2oX1nd`DK5mAAqyhUqrNNv!a|2 z2Vg&zm%y1Y&fkbAO(?+MP-^FQxz1mkJ2?B_=^%=svQqL=zIK#G{YG@aLH!`^R={*$ o&gJL%mxc$IU3seC)0-7-^(i@Dwx!|fGm)y-w<-(&_3!upFQ2q0YybcN literal 0 HcmV?d00001 diff --git a/Reti/Laboratorio/Assigment5/Calculator/server.c b/Reti/Laboratorio/Assigment5/Calculator/server.c new file mode 100644 index 0000000..01e11ec --- /dev/null +++ b/Reti/Laboratorio/Assigment5/Calculator/server.c @@ -0,0 +1,131 @@ +#include <netdb.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/socket.h> +#include <sys/types.h> +#include <time.h> +#include <unistd.h> + +int main(int argc, char *argv[]) { + int simpleSocket = 0; + int simplePort = 0; + int returnStatus = 0; + struct sockaddr_in simpleServer; + + if (argc < 1 || argc > 2) { + fprintf(stderr, "Usage: %s <port>\n", argv[0]); + exit(1); + } + + simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + + if (simpleSocket == -1) { + + fprintf(stderr, "Could not create a socket!\n"); + exit(1); + + } else { + fprintf(stderr, "Socket created!\n"); + } + + /* retrieve the port number for listening */ + if (argc == 2) { + simplePort = atoi(argv[1]); + if (simplePort < 10000 || simplePort > 12000) { + fprintf(stderr, "Port must be in range [10000, 12000]\n"); + exit(1); + } + } else { + srand(time(NULL)); + simplePort = (rand() % 1999) + 10000; + } + + /* setup the address structure */ + /* use INADDR_ANY to bind to all local addresses */ + memset(&simpleServer, '\0', sizeof(simpleServer)); + simpleServer.sin_family = AF_INET; + simpleServer.sin_addr.s_addr = htonl(INADDR_ANY); + simpleServer.sin_port = htons(simplePort); + + /* bind to the address and port with our socket */ + returnStatus = bind(simpleSocket, (struct sockaddr *)&simpleServer, + sizeof(simpleServer)); + + if (returnStatus == 0) { + fprintf(stderr, "Bind completed on port %d!\n", simplePort); + } else { + fprintf(stderr, "Could not bind to address!\n"); + close(simpleSocket); + exit(1); + } + + /* lets listen on the socket for connections */ + returnStatus = listen(simpleSocket, 5); + + if (returnStatus == -1) { + fprintf(stderr, "Cannot listen on socket!\n"); + close(simpleSocket); + exit(1); + } + + struct sockaddr_in clientName = {0}; + int simpleChildSocket = 0; + int clientNameLength = sizeof(clientName); + + /* wait here */ + while (1) { + char valueToSend[256] = {'\0'}; + char valueToRead[256] = {'\0'}; + + simpleChildSocket = + accept(simpleSocket, (struct sockaddr *)&clientName, &clientNameLength); + + if (simpleChildSocket == -1) { + fprintf(stderr, "Cannot accept connections!\n"); + close(simpleSocket); + exit(1); + } + + // Leggendo il numero di richieste da svolgere + read(simpleChildSocket, valueToRead, sizeof(valueToRead)); + int iterations = atoi(valueToRead); + printf("Numero iterazioni: %d\n", iterations); + + // Mando ACK al Client + snprintf(valueToSend, sizeof(valueToSend), "ACK"); + write(simpleChildSocket, valueToSend, sizeof(valueToSend)); + + for (int i = 0; i < iterations; ++i) { + // Pulisco i buffer + memset(valueToRead, '\0', sizeof(valueToRead)); + memset(valueToSend, '\0', sizeof(valueToSend)); + + // Leggo il valore ricevuto dal client e gli restituisco la lunghezza + read(simpleChildSocket, valueToRead, sizeof(valueToRead)); + snprintf(valueToSend, sizeof(valueToSend), "%zu", strlen(valueToRead)); + write(simpleChildSocket, valueToSend, sizeof(valueToSend)); + } + + memset(valueToRead, '\0', sizeof(valueToRead)); + memset(valueToSend, '\0', sizeof(valueToSend)); + + // Aspetto il BYE dal client + read(simpleChildSocket, valueToRead, sizeof(valueToRead)); + + if (strcmp(valueToRead, "BYE") != 0) { + fprintf(stderr, "Invalid BYE\n"); + exit(1); + } + printf("\tBYE RECEIVED\n"); + + // Invio ACK al Server + snprintf(valueToSend, sizeof(valueToSend), "ACK"); + write(simpleChildSocket, valueToSend, sizeof(valueToSend)); + + close(simpleChildSocket); + } + + close(simpleSocket); + return 0; +} -- GitLab