Skip to content

Commit

Permalink
Version concurrente
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelvalero committed Jan 31, 2022
1 parent 914d699 commit ff2ffac
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 76 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
VersionInicial
VersionConNuevoServicio
VersionConConexionDesconexion
VersionConcurrente
2 changes: 1 addition & 1 deletion clienteEjercicioGuia/WindowsFormsApplication1/Form1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -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
161 changes: 95 additions & 66 deletions servidorEjercicioGuia.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,93 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <pthread.h>

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)
Expand All @@ -29,82 +106,34 @@ 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");

if (listen(sock_listen, 3) < 0)
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;

}



}

0 comments on commit ff2ffac

Please sign in to comment.