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 1bcf777..17166d2 100644 Binary files a/clienteEjercicioGuia/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.exe and b/clienteEjercicioGuia/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.exe differ diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.pdb b/clienteEjercicioGuia/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.pdb index f2b8aea..aab4f4e 100644 Binary files a/clienteEjercicioGuia/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.pdb and b/clienteEjercicioGuia/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.pdb differ diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index f9818b8..daa58ae 100644 Binary files a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.exe b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.exe index 1bcf777..17166d2 100644 Binary files a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.exe and b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.exe differ diff --git a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.pdb b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.pdb index f2b8aea..aab4f4e 100644 Binary files a/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.pdb and b/clienteEjercicioGuia/WindowsFormsApplication1/obj/Debug/WindowsFormsApplication1.pdb differ 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; + } + + + }