Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Aplicacion Cliente-Servidor

Estas en el tema de Aplicacion Cliente-Servidor en el foro de C/C++ en Foros del Web. Buenas, soy nuevo por aca. Queria ver si me podrian ayudar. Tengo q hacer una aplicacion cliente servidor en C, en donde varios clientes se ...
  #1 (permalink)  
Antiguo 10/02/2011, 13:22
 
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Aplicacion Cliente-Servidor

Buenas, soy nuevo por aca. Queria ver si me podrian ayudar. Tengo q hacer una aplicacion cliente servidor en C, en donde varios clientes se conecten a un servidor y luego el servidor distribuya una tarea (que seria sumar del 1 a N) entre los clientes conectados.

El tema es que no se como implementarlo. Tengo hecho la base con los conect, accept, listen, etc pero no se como hace para q la conexion sea concurrente.

Se agradece cualquier dato.
saludos
  #2 (permalink)  
Antiguo 13/02/2011, 11:18
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Aplicacion Cliente-Servidor

Te aconsejo que muestres tu codigo y asi se vera mejor el problema sino es muy dificil de enteder que es lo que te sucede y que agregar para solucionar tu problema.

Saludos.

NicoStone
  #3 (permalink)  
Antiguo 14/02/2011, 12:55
 
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Aplicacion Cliente-Servidor

Te dejo el codigo servidor y el cliente. Lo que tengo q hacer es que el servidor sea concurrente y pueda atender varios clientes a la vez. (tengo entendido q habria q hacerlo con fork() o select() pero ni idea como)...

Servidor:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>



#define P_SIZE sizeof ( struct protocolo )

struct protocolo {
int64_t n1;
int64_t n2;
int64_t res;
};


int main()
{

int n;
int sd;
int sdc;
int lon;
int pid;
int salir;
int leidos;
char buffer[P_SIZE];
char pantalla[512];
struct sockaddr_in servidor;
struct sockaddr_in cliente;
struct protocolo *suma;

servidor.sin_family = AF_INET;
servidor.sin_port = htons(4444);
servidor.sin_addr.s_addr = INADDR_ANY;

sd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

if (bind(sd, (struct sockaddr *) &servidor, sizeof(servidor)) < 0) {

perror("BIND");
exit(-1);

}

listen(sd, 5);

suma = (struct protocolo *) buffer;

while (1) {

lon = sizeof (cliente);

sdc = accept(sd, (struct sockaddr *) &cliente, &lon);

salir = 0;

printf("Se obtuvo una conexion desde %s\n", //imprime la IP del cliente conectado
inet_ntoa(cliente.sin_addr) );



printf("Ingrese el valor de inicio: "); //Se ingresan los valores de inicio y de fin para sumar
fgets(pantalla, sizeof(pantalla), stdin);
pantalla[strlen(pantalla) -1 ] = '\0';


suma->n1 = htonl(atoi(pantalla));


printf("Ingrese segundo valor: ");

fgets(pantalla, sizeof(pantalla), stdin);
pantalla[strlen(pantalla) -1] = '\0';

suma->n2 = htonl(atoi(pantalla));


send(sdc, buffer, P_SIZE, 0);

close(sdc);

break;

}
}






CLIENTE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>



#define P_SIZE sizeof ( struct protocolo )

/****************** FUNCIONES ********************/
int calcular_suma(int inicio, int fin);

/*************************************************/

struct protocolo {
uint64_t n1;
uint64_t n2;
uint64_t res;
};

int main(int argc, char *argv[])
{

int numbytes;
int n,i;
int sd,sdc;
int lon;
int leidos;
int inicio;
int fin;
unsigned long long int total=0;
char buffer[P_SIZE];
char pantalla[512];
struct sockaddr_in servidor;
struct protocolo *suma;
struct hostent *h;

if (argc < 2) {

printf("Ejecute %s (nombre del servidor)\n", argv[0]);
exit(-1);

}

servidor.sin_family = AF_INET;
servidor.sin_port = htons(4444);


if (h = gethostbyname(argv[1])) {

memcpy(&servidor.sin_addr, h->h_addr, h->h_length);

} else {

printf("No se encontro %s \n", argv[1]);
exit(-1);

}

sd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

if (connect(sd, (struct sockaddr *) &servidor, sizeof(servidor)) < 0) {

perror("Connect:");
exit(-1);

}

while (1) {

suma = (struct protocolo *) buffer;


n = recv(sd, buffer,P_SIZE, 0);

inicio=ntohl(suma->n1);
fin=ntohl(suma->n2);


printf("Esta terminal sumara desde el numero: %d al numero: %d \n", inicio, fin);

total=calcular_suma(inicio,fin);


printf("La suma total devuelta por esta terminal es: %llu \n", total);

break;
}

}


int calcular_suma(int inicio, int fin)
{
unsigned long long int suma=0;
while (inicio<=fin) {
suma=suma + inicio;
inicio++;
}
return suma;
}

Etiquetas: aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:45.