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

problemas al conectar varios sockets

Estas en el tema de problemas al conectar varios sockets en el foro de C/C++ en Foros del Web. hola tengo que hacer una aplicacion en la que el cliete lee por un socket y escribe por otro socket, pero me da problemas al ...
  #1 (permalink)  
Antiguo 27/03/2011, 14:54
 
Fecha de Ingreso: marzo-2011
Mensajes: 4
Antigüedad: 13 años, 1 mes
Puntos: 0
problemas al conectar varios sockets

hola tengo que hacer una aplicacion en la que el cliete lee por un socket y escribe por otro socket, pero me da problemas al crear el segundo, la verdad, no se que puede ser.

dejo el codigo, a ver si me podeis echar una manilla, gracias!

int main(int argc, char *argv[])
{
/*defino variables*/
struct sockaddr_in name_ser, name_ser_dest;
int cfd,cfd_dest,tam,ncar,fd,tam_fichero, n_bytes_leidos;
int conexion_cerrada;
char nom_fichero[TAM_LINEA], bloque[TAM_BLOQUE];

/*decodifico los argumentos*/
char *ori[2], *dest[2];
ori[0]=strtok(argv[1],":");
ori[1]=strtok(NULL,":");

dest[0]=strtok(argv[2],":");
dest[1]=strtok(NULL,":");

/*creo el socket para el servidor origen*/
if((cfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{ perror("Error en socket de cliente");
exit(-1);
}

/*configuro la estructura de direccion para el servidor origen*/
name_ser.sin_family=AF_INET;
name_ser.sin_port=htons(9004);
name_ser.sin_addr.s_addr=inet_addr(ori[0]);
tam=sizeof(name_ser);

/*conecto con el servidor origen*/
if(connect(cfd,(struct sockaddr *) &name_ser,tam)==-1)
{ perror("Error en connect");
exit(-1);
}

/*envia al servidor origen la peticion de que le envie un archivo*/
write(cfd,0,sizeof(int));

/*envia al servidor origen el nombre del fichero que se quiere recibir*/
write(cfd,ori[1],strlen(ori[1])+1);

/*Lo primero que leera del socket sera el tama\o del fichero que le va a transmitir el proceso servidor origen*/
ncar=read(cfd,&tam_fichero,sizeof(int));

/*si no existe el fichero*/
if(ncar<=0)
{
conexion_cerrada=1;
printf("El proceso servidor ha cerrado conexion\n");
}
else // si existe
{
if(tam_fichero==-1) { printf("No es posible transmitir el fichero pedido\n"); }
else
{
printf("Me dispongo a recibir el fichero %s de %d bytes\n",ori[1], tam_fichero);

/*en vez de guardar el archivo que recivo lo guardo directamente en el socket del servidor destino*/
if((cfd_dest=socket(AF_INET,SOCK_STREAM,0))==-1)
{ perror("Error en socket de cliente");
exit(-1);
}

/*configuramos la direccion para el servidor destino*/
name_ser_dest.sin_family=AF_INET;
name_ser_dest.sin_port=htons(19000);
name_ser_dest.sin_addr.s_addr=inet_addr(dest[0]);
tam=sizeof(name_ser_dest);

/*establecemos conexion con el servidor destino*/
if(connect(cfd_dest,(struct sockaddr *) &name_ser_dest,tam)==-1)
{ perror("Error en connect");
exit(-1);
}

/*envia al servidor destino el path destino del archivo que va a recibir*/
write(cfd_dest,dest[1],strlen(dest[1])+1);

/*envia al servidor destino el tamaño del fichero que va a recibir*/
write(cfd_dest,tam_fichero,sizeof(int));

n_bytes_leidos=0;
/*mientra leemos el archivo que nos envia el servidor origen*/
while ((ncar=read(cfd,bloque,TAM_BLOQUE))>=0)
{
write(1,bloque,ncar);
n_bytes_leidos+=ncar;
/*lo escrivimos en el socket del servidor destino*/
write(cfd_dest,bloque,ncar);
}
}
}

close(cfd);
close(cfd_dest);
exit(0);
return 0;
}

Etiquetas: sockets
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 04:05.