[eside-ghost] ayuda con sockets

Silvia Quiñoz slivia1 en hotmail.com
Dom Ene 6 18:27:03 CET 2008


Hola!!
  Estoy haciendo una práctica con sockets y quería pediros ayuda.
  No consigo que el cliente se conecte al servidor y no veo el fallo en el código. Os lo pongo aquí para ver si me podeis ayudar. El cliente me da error en recv y creo que es porque el servidor no llega a aceptar su conexión. 
  Gracias de antemano.

CODIGO DEL CLIENTE:

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define PUERTO 15002 /*Definimos el puerto que vamos a utilizar*/
#define MAXDATASIZE 100 /*maxima cantidad de bytes q se pueden recibir en una llamada a recv*/

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

	int dCliente, result_con ;
	struct sockaddr_in client_dir ;

	dCliente = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(dCliente < 0){ 
		printf("Error al crear el socket\n");
		exit(-1);
	}
	printf("Socket creado, dCliente: %d\n", dCliente);

	client_dir.sin_family = AF_INET ; 
	client_dir.sin_port = htons (PUERTO) ; 
	client_dir.sin_addr.s_addr = htonl(INADDR_ANY);

	bzero((char *) &client_dir, sizeof(client_dir));
	
	result_con = connect(dCliente, (struct sockaddr *)&client_dir, sizeof(struct sockaddr));
	printf("result_con: %d\n", result_con);
	if(result_con < 0){ 
		printf ("Error en connect\n");
		exit(-1);
	}
	printf("puerto al que se ha conectado: %ld\n", client_dir.sin_port);
	printf("despues de connect\n");
	char *buffer = malloc(MAXDATASIZE);
	result_con = recv(dCliente, buffer, MAXDATASIZE, 0);
	if(result_con < 0){
		printf ("Error en read\n");
		exit(-1);
	}
	/*visualizamos lo recibido*/
	buffer[result_con] = '\0';
	printf("Recibido: %s\n", buffer);
		
	close (dCliente) ; /*Cerramos el descriptor del cliente*/
	return (0);
}

CODIGO DEL SERVIDOR:

#include 
#include 
#include 
#include 
#include  
#include 
#include  

#define PUERTO 15002 
#define BACKLOG 5 
#define TAM 100 

int main(void){
	int dServidor, dCliente; 
	
	struct sockaddr_in dir_servidor, dir_cliente; 
	dir_servidor.sin_family = AF_INET; 
	dir_servidor.sin_port = htons (PUERTO); 
	dir_servidor.sin_addr.s_addr = htonl(INADDR_ANY);
	
	char buffer [TAM] ; 
	ssize_t copia_parcial ;
	int n;
	int sin_size; 
	
	dServidor = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(dServidor < 0){
		printf ("Error al crear el socket.\n") ;
		exit (-1) ;
	} 
	
	bzero((char *) &dir_servidor, sizeof(dir_servidor));
	if (bind (dServidor, (struct sockaddr *) &dir_servidor, sizeof(struct sockaddr)) < 0){
		printf("Error de bind\n");
		exit(-1);
	} 

	if (listen (dServidor, BACKLOG) == -1){
		printf ("Error en listen\n");
		exit(-1);
	}  
	while (1){
		printf("esperando clientes\n");
		socklen_t addr_client_len = sizeof(dir_cliente); 
		dCliente = accept (dServidor,(struct sockaddr *) &dir_cliente, &addr_client_len);
		printf("cliente aceptado: dCliente: %d\n", dCliente);
		if(dCliente < 0){
			printf("Error en accept\n");
			exit (-1);
		}
		printf("servidor: conexion desde %s\n", inet_ntoa(dir_cliente.sin_addr)) ;
		if (!fork()){
			if(send(dCliente, "Hola Mundo!\n", 12, 0) == -1)
				printf ("Error al enviar, en send");
			close(dCliente);
			exit(0); //sale sin error
		}
		close (dCliente);
	}
	
	close (dServidor) ; /* Cerramos el descriptor */
	return(0);
}


_________________________________________________________________
Tecnología, moda, motor, viajes,…suscríbete a nuestros boletines para estar siempre a la última
http://newsletters.msn.com/hm/maintenanceeses.asp?L=ES&C=ES&P=WCMaintenance&Brand=WL&RU=http%3a%2f%2fmail.live.com


Más información sobre la lista de distribución eside-ghost