From ff2ffac2f4120bd15ee16400d2391296bc71fae9 Mon Sep 17 00:00:00 2001 From: miguelvalero Date: Mon, 31 Jan 2022 17:59:27 +0100 Subject: [PATCH] Version concurrente --- README.md | 1 + .../WindowsFormsApplication1/Form1.cs | 2 +- .../bin/Debug/WindowsFormsApplication1.exe | Bin 12800 -> 12800 bytes .../bin/Debug/WindowsFormsApplication1.pdb | Bin 24064 -> 24064 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7075 -> 7036 bytes .../obj/Debug/WindowsFormsApplication1.exe | Bin 12800 -> 12800 bytes .../obj/Debug/WindowsFormsApplication1.pdb | Bin 24064 -> 24064 bytes .../clienteForm.csproj.FileListAbsolute.txt | 18 +- servidorEjercicioGuia.c | 161 +++++++++++------- 9 files changed, 106 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index 0a8f96e..cb8d41d 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,4 @@ VersionInicial VersionConNuevoServicio VersionConConexionDesconexion + VersionConcurrente diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/Form1.cs b/clienteEjercicioGuia/WindowsFormsApplication1/Form1.cs index ef79edc..33ac2f7 100644 --- a/clienteEjercicioGuia/WindowsFormsApplication1/Form1.cs +++ b/clienteEjercicioGuia/WindowsFormsApplication1/Form1.cs @@ -82,7 +82,7 @@ private void button2_Click(object sender, EventArgs e) if (mensaje == "SI") MessageBox.Show("Tu nombre ES bonito."); else - MessageBox.Show("Tu nombre NO bonito. Lo siento."); + MessageBox.Show("Tu nombre NO es bonito. Lo siento."); } else diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.exe b/clienteEjercicioGuia/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.exe index 1bcf77716fce7926b72e800c8eec1ebea2aafd73..17166d2ff828b3b03447d36e4d9659c81750f36f 100644 GIT binary patch delta 473 zcmXX@O=uHg5S`gcmHe+Fje4Fhjx-n441+QJ=QPw;#D zZi271JL8-MbH@LrNEF9rdH@rg;TGok22X+|(CJjNa+62A7ji#y1&@^|w)}heDh$QqTPP@f3|vr#{`M?>hIazLgkP=j8`!GFYu;_u zWZuMLpv>Q}5wKW=89c@@oDJr=iU$Hup)2qs#I!tjFd^bwJk%`iVpZ$oPuS81{|_J5 z6Z`{{`XSZE4S{cwGPJtPDRtasOs%dFNVezZXrumj{Hp z=L8E$!s9}^kl+lZiB8)kJKL+zXpy<&3+w$qHE|)femA<{Dw4<(gA z1PQzx46}MF0_mZL`&hmeEG&HJWmXUR9vIRe>Zza8ALn<@=f{EX`SY6{njKnN@XY`I z<1AVjbJnioBm+_J_imyf??hU708vcy9AZNx(!R@*8$8&7ys@+bE>pXlj?8k|-K@xVnsE~oE7K;X-;A5sSXd;aIe#QF0%bMixl6bN%iJd1 z(fap5arx)XGF&t%5#eW}RLJA#vQ7g=m{T*A0XgoA@gi*52le>>se z)S|M?l>8#+{JiASqN3EilGMq9vPzQ^g5)Q!l<^QQhRP?S$amn;r!@JmtThgOj+1A~ z;j>e6a#aBLWLtUc`ZtEzO}-}YjK^-t$Re-oaiWQItLi+H&_@L8d(__Vwe~hP66Y=0*FD;F&BtG0L5CE85s0{YG8nS zqhllEBoz+UNqbKB?U~H0V$azMR00BelN(ip>p>bo27@%Eg2f>O$S@5cQ~HqsW7Yao z^J9Q)kfk8CAUR~UAj@HD|GFG11*ru&3Zxb!hpZOlXqeh)IbFLyAjKeGfE0rykrjh{ z3RC=DKKK<#Ehq#)YC&?T6CH1FQuAPBjM?m|F3iMqgJpA^W+E$l1!Ef{W82Ej$MlY{ zFnVw9Hg08OwAd_YHJ_ESW%EY+Vjf1D&8j}DnFVcu7Ty425Xb`hY6^iA3Q8?*1Y$E9 zk31-a^Gx%fD*-VF5T^oTiEFYUm(rvt4zZWOL~8*QR0pa6(IC*oHd!vpZF5G{491B8EQ~sv Q8QuOfZWeI+0OSe)03@7j_y7O^ delta 1498 zcmZqJ!`QHgae@x#4+aR(+pNfTnsE~oD-&bGW=5u8jGNe4SR~rMeNSWrD)@P0#);Ay z6C5VHFbPh+^X0*287>_Tk;hd(rt+>kJZHmmQ=aEcPj@(Ma{aT>aS7ul5e^QfHEfd~ z`r9cu7UX0mCnjg+=Q)E>Y6Xz#l3JXcp9f}6b_`XTq#!wYRiM!16*4voiE#Bm6);69 zDC!+2-wENFyeH6_Xv5FSx)5Wq%j66>VhxpKVZXbKE; zvM?}c06Ef+3>Za!yyuJovSGG?-2k z7Lt%fKnc#7gs2W6QY|R!`4X-6tSskbzaV1Mu@%sdlfMTYoy5f=iK{4CH(53$o0#+t z%JxCTDC{Ce5hzOr5~mQ7&BP|(409t^gO2MyAxJbU0Vxh3t_Mat7m(Hl1_?KiehZ{| zfHX*q4TwPin06UJS&kiuuL3dWW<##?j1vQdCPi?FX#sPA1yC>>C<~%NfQ5asT!b5= R&gR63*^C=a&H&Y#003!R<>>$b diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index f9818b82e1f098399f726881fac067a56c6ccd6a..daa58aeae960e9e49e9e21a7a7ce86e109e92739 100644 GIT binary patch delta 108 zcmZ2%{>N;?B5uY#leu|qgo9Iy$}&^(i=6ZGl1qzx?$aG09PR`E*Gbi^+SWnjFxxl!I VXyuzbc(-veE+9(%=01scOaM7)IIaKy diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.exe b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.exe index 1bcf77716fce7926b72e800c8eec1ebea2aafd73..17166d2ff828b3b03447d36e4d9659c81750f36f 100644 GIT binary patch delta 473 zcmXX@O=uHg5S`gcmHe+Fje4Fhjx-n441+QJ=QPw;#D zZi271JL8-MbH@LrNEF9rdH@rg;TGok22X+|(CJjNa+62A7ji#y1&@^|w)}heDh$QqTPP@f3|vr#{`M?>hIazLgkP=j8`!GFYu;_u zWZuMLpv>Q}5wKW=89c@@oDJr=iU$Hup)2qs#I!tjFd^bwJk%`iVpZ$oPuS81{|_J5 z6Z`{{`XSZE4S{cwGPJtPDRtasOs%dFNVezZXrumj{Hp z=L8E$!s9}^kl+lZiB8)kJKL+zXpy<&3+w$qHE|)femA<{Dw4<(gA z1PQzx46}MF0_mZL`&hmeEG&HJWmXUR9vIRe>Zza8ALn<@=f{EX`SY6{njKnN@XY`I z<1AVjbJnioBm+_J_imyf??hU708vcy9AZNx(!R@*8$8&7ys@+bE>pXlj?8k|-K@xVnsE~oE7K;X-;A5sSXd;aIe#QF0%bMixl6bN%iJd1 z(fap5arx)XGF&t%5#eW}RLJA#vQ7g=m{T*A0XgoA@gi*52le>>se z)S|M?l>8#+{JiASqN3EilGMq9vPzQ^g5)Q!l<^QQhRP?S$amn;r!@JmtThgOj+1A~ z;j>e6a#aBLWLtUc`ZtEzO}-}YjK^-t$Re-oaiWQItLi+H&_@L8d(__Vwe~hP66Y=0*FD;F&BtG0L5CE85s0{YG8nS zqhllEBoz+UNqbKB?U~H0V$azMR00BelN(ip>p>bo27@%Eg2f>O$S@5cQ~HqsW7Yao z^J9Q)kfk8CAUR~UAj@HD|GFG11*ru&3Zxb!hpZOlXqeh)IbFLyAjKeGfE0rykrjh{ z3RC=DKKK<#Ehq#)YC&?T6CH1FQuAPBjM?m|F3iMqgJpA^W+E$l1!Ef{W82Ej$MlY{ zFnVw9Hg08OwAd_YHJ_ESW%EY+Vjf1D&8j}DnFVcu7Ty425Xb`hY6^iA3Q8?*1Y$E9 zk31-a^Gx%fD*-VF5T^oTiEFYUm(rvt4zZWOL~8*QR0pa6(IC*oHd!vpZF5G{491B8EQ~sv Q8QuOfZWeI+0OSe)03@7j_y7O^ delta 1498 zcmZqJ!`QHgae@x#4+aR(+pNfTnsE~oD-&bGW=5u8jGNe4SR~rMeNSWrD)@P0#);Ay z6C5VHFbPh+^X0*287>_Tk;hd(rt+>kJZHmmQ=aEcPj@(Ma{aT>aS7ul5e^QfHEfd~ z`r9cu7UX0mCnjg+=Q)E>Y6Xz#l3JXcp9f}6b_`XTq#!wYRiM!16*4voiE#Bm6);69 zDC!+2-wENFyeH6_Xv5FSx)5Wq%j66>VhxpKVZXbKE; zvM?}c06Ef+3>Za!yyuJovSGG?-2k z7Lt%fKnc#7gs2W6QY|R!`4X-6tSskbzaV1Mu@%sdlfMTYoy5f=iK{4CH(53$o0#+t z%JxCTDC{Ce5hzOr5~mQ7&BP|(409t^gO2MyAxJbU0Vxh3t_Mat7m(Hl1_?KiehZ{| zfHX*q4TwPin06UJS&kiuuL3dWW<##?j1vQdCPi?FX#sPA1yC>>C<~%NfQ5asT!b5= R&gR63*^C=a&H&Y#003!R<>>$b diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/clienteForm.csproj.FileListAbsolute.txt b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/clienteForm.csproj.FileListAbsolute.txt index 9871c3c..bd9c539 100644 --- a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/clienteForm.csproj.FileListAbsolute.txt +++ b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/clienteForm.csproj.FileListAbsolute.txt @@ -88,12 +88,12 @@ E:\Docencia\SO\VideosEjercciioGuia\Leccion1\Codigo\cliente_con_conexion_desconex E:\Docencia\SO\VideosEjercciioGuia\Leccion1\Codigo\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.Form1.resources E:\Docencia\SO\VideosEjercciioGuia\Leccion1\Codigo\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.Properties.Resources.resources E:\Docencia\SO\VideosEjercciioGuia\Leccion1\Codigo\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\clienteForm.csproj.GenerateResource.Cache -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.pdb -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\clienteForm.csprojAssemblyReference.cache -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.Form1.resources -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.Properties.Resources.resources -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\clienteForm.csproj.GenerateResource.cache -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\clienteForm.csproj.CoreCompileInputs.cache -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.exe -F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\AplicacionConConexionDesconexion\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.pdb +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.pdb +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\clienteForm.csprojAssemblyReference.cache +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.Form1.resources +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.Properties.Resources.resources +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\clienteForm.csproj.GenerateResource.cache +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\clienteForm.csproj.CoreCompileInputs.cache +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.exe +F:\Julio2018\Docencia\SO\2021-2022Q2\EjercicioGuiaEnGitHub\ServidorConcurrente\cliente_con_conexion_desconexion\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.pdb diff --git a/servidorEjercicioGuia.c b/servidorEjercicioGuia.c index 9fff31e..d9d7e53 100644 --- a/servidorEjercicioGuia.c +++ b/servidorEjercicioGuia.c @@ -5,16 +5,93 @@ #include #include #include +#include +void *AtenderCliente (void *socket) +{ + int sock_conn; + int *s; + s= (int *) socket; + sock_conn= *s; + + //int socket_conn = * (int *) socket; + + char peticion[512]; + char respuesta[512]; + int ret; + + + int terminar =0; + // Entramos en un bucle para atender todas las peticiones de este cliente + //hasta que se desconecte + while (terminar ==0) + { + // Ahora recibimos la petici?n + ret=read(sock_conn,peticion, sizeof(peticion)); + printf ("Recibido\n"); + + // Tenemos que a?adirle la marca de fin de string + // para que no escriba lo que hay despues en el buffer + peticion[ret]='\0'; + + + printf ("Peticion: %s\n",peticion); + + // vamos a ver que quieren + char *p = strtok( peticion, "/"); + int codigo = atoi (p); + // Ya tenemos el c?digo de la petici?n + char nombre[20]; + + if (codigo !=0) + { + p = strtok( NULL, "/"); + + strcpy (nombre, p); + // Ya tenemos el nombre + printf ("Codigo: %d, Nombre: %s\n", codigo, nombre); + } + + if (codigo ==0) //petici?n de desconexi?n + terminar=1; + else if (codigo ==1) //piden la longitd del nombre + sprintf (respuesta,"%d",strlen (nombre)); + else if (codigo ==2) + // quieren saber si el nombre es bonito + if((nombre[0]=='M') || (nombre[0]=='S')) + strcpy (respuesta,"SI"); + else + strcpy (respuesta,"NO"); + else //quiere saber si es alto + { + p = strtok( NULL, "/"); + float altura = atof (p); + if (altura > 1.70) + sprintf (respuesta, "%s: eres alto",nombre); + else + sprintf (respuesta, "%s: eresbajo",nombre); + } + + if (codigo !=0) + { + + printf ("Respuesta: %s\n", respuesta); + // Enviamos respuesta + write (sock_conn,respuesta, strlen(respuesta)); + } + } + // Se acabo el servicio para este cliente + close(sock_conn); + +} int main(int argc, char *argv[]) { - int sock_conn, sock_listen, ret; + int sock_conn, sock_listen; struct sockaddr_in serv_adr; - char peticion[512]; - char respuesta[512]; + // INICIALITZACIONS // Obrim el socket if ((sock_listen = socket(AF_INET, SOCK_STREAM, 0)) < 0) @@ -29,7 +106,7 @@ int main(int argc, char *argv[]) //htonl formatea el numero que recibe al formato necesario serv_adr.sin_addr.s_addr = htonl(INADDR_ANY); // establecemos el puerto de escucha - serv_adr.sin_port = htons(9000); + serv_adr.sin_port = htons(9050); if (bind(sock_listen, (struct sockaddr *) &serv_adr, sizeof(serv_adr)) < 0) printf ("Error al bind"); @@ -37,74 +114,26 @@ int main(int argc, char *argv[]) printf("Error en el Listen"); int i; - // Bucle infinito + int sockets[100]; + pthread_t thread; + i=0; + // Bucle para atender a 5 clientes for (;;){ printf ("Escuchando\n"); sock_conn = accept(sock_listen, NULL, NULL); printf ("He recibido conexion\n"); + + sockets[i] =sock_conn; //sock_conn es el socket que usaremos para este cliente - int terminar =0; - // Entramos en un bucle para atender todas las peticiones de este cliente - //hasta que se desconecte - while (terminar ==0) - { - // Ahora recibimos la petici?n - ret=read(sock_conn,peticion, sizeof(peticion)); - printf ("Recibido\n"); - - // Tenemos que a?adirle la marca de fin de string - // para que no escriba lo que hay despues en el buffer - peticion[ret]='\0'; - - - printf ("Peticion: %s\n",peticion); - - // vamos a ver que quieren - char *p = strtok( peticion, "/"); - int codigo = atoi (p); - // Ya tenemos el c?digo de la petici?n - char nombre[20]; - - if (codigo !=0) - { - p = strtok( NULL, "/"); - - strcpy (nombre, p); - // Ya tenemos el nombre - printf ("Codigo: %d, Nombre: %s\n", codigo, nombre); - } - - if (codigo ==0) //petici?n de desconexi?n - terminar=1; - else if (codigo ==1) //piden la longitd del nombre - sprintf (respuesta,"%d",strlen (nombre)); - else if (codigo ==2) - // quieren saber si el nombre es bonito - if((nombre[0]=='M') || (nombre[0]=='S')) - strcpy (respuesta,"SI"); - else - strcpy (respuesta,"NO"); - else //quiere saber si es alto - { - p = strtok( NULL, "/"); - float altura = atof (p); - if (altura > 1.70) - sprintf (respuesta, "%s: eres alto",nombre); - else - sprintf (respuesta, "%s: eresbajo",nombre); - } - - if (codigo !=0) - { - - printf ("Respuesta: %s\n", respuesta); - // Enviamos respuesta - write (sock_conn,respuesta, strlen(respuesta)); - } - } - // Se acabo el servicio para este cliente - close(sock_conn); + // Crear thead y decirle lo que tiene que hacer + + pthread_create (&thread, NULL, AtenderCliente,&sockets[i]); + i=i+1; + } + + + }