[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