[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]te recomiendo esta direccion http://webdia.cem.itesm.mx/dia/ac/rogomez/progdist.html es del que fue mi profesor de operativos, estan las láminas del curso, codigos ejemplos de sockets en UPT y TCP. suerte FQC ---- fito <fito en telebot net> escribió: ---- > > Hola lista....... > > Ayuda !!!!!!! estoy trarando de aprender a programar con sockets en C >pero estoy atascado con la forma de mandar datos de un socket a otro, uso >sendto pero namas no jala, los sockets los conecto chido y todo hasta la parte >de llamar a accept(), pero no manda datos de uno a otro, como se hace ?? Ahi >les va mi codigo para que quien pueda lo cheque........gracias..... > >-----------Inicia sockets.c------------ > >/* prueba con sockets......... */ >#include <stdio.h> >#include <sys/types.h> >#include <sys/socket.h> >#include <errno.h> >#include <string.h> >#include <unistd.h> > >main() >{ > int sockt1, sockt2, results, address; > struct sockaddr s1, s2; > > /* > struct sockaddr { > --el tipo de direccion del socket > (checar bits/socket.h) -- > unsigned short int sa_family; > -- nombre del socket en el sistema de archivos -- > char sa_data[14]; > }; > > */ > > /* Creamos los sockets */ > sockt1 = socket(AF_UNIX, SOCK_STREAM, PF_LOCAL); > sockt2 = socket(AF_UNIX, SOCK_STREAM, PF_LOCAL); > > > printf("Los sockets estan listos para conectarse y son %d y %d" > " respectivamente.\nPreparando socket %d para escuchar " > "conecciones.........\n", sockt1, sockt2, sockt2); > > /* antes de pasar las estructuras sockaddr a bind deben ser > inicializadas */ > s1.sa_family = s2.sa_family = AF_LOCAL; > strcpy(s1.sa_data, "Sock1"); > strcpy(s2.sa_data, "Sock2"); > > /* Primero debemos asignar direcciones a los sockets con bind*/ > results = bind(sockt1, &s1, sizeof(struct sockaddr )); > results = bind(sockt2, &s2, sizeof(struct sockaddr )); > > printf("\ns1 contiene:\ns1.sa_family = %u\ns1.sa_data = %s\n", > s1.sa_family, s1.sa_data); > > /* Para conecciones los sockets de SOCK_STREAM deben estar > primero "escuchando" en espera de peticiones */ > results = listen(sockt2, 1); > > printf("Conectando socket %d con socket %d\n....................", > sockt1, sockt2); > > results = connect(sockt1, &s2, sizeof(struct sockaddr)); > > if (!results) > puts("Los Sockets estan conectados !!!!!!!!!!!"); > else > printf("Error al intentar conectar los sockets......errno = " > "%d\n", errno); > > /* Ahora veamos si estamos listos para transmitir informacion */ > address = sizeof(s1); > results = accept(sockt2, &s1, &address); > > printf("Mandando mensaje de socket %d a %d\n.......", sockt1, sockt2); > printf("sizeof(s1) = %u\nsizeof(s2) = %u\n", sizeof(s1), sizeof(s2)); > > /* > int sendto(int s, const void *msg, int msglen, unsigned int flags, > const struct sockaddr *to, int tolen); > > int send(int s, const void *msg, int msglen, unsigned int flags); > > valores de flags pueden ser: > MSG_OOB (para SOCK_STREAM) o MSG_DONTROUTE > */ > if (sendto(sockt1, (void *) "Hola\n", sizeof((void *)"Hola\n"), > MSG_OOB, &s2, sizeof(s2)) == -1) { > printf("Error al mandar mensaje al socket %d\n", sockt2); > printf("%d\nerrno = %d\n", ENOTSOCK, errno); > } > else > puts("Mensaje recibido !!!!!!!!!\n"); > > close(sockt1); > close(sockt2); > unlink(s1.sa_data); > unlink(s2.sa_data); >} > >-----------Fin sockets.c---------- > >-- >Rodolfo Conde Martinez. >fito en telebot net >rconde en ada fciencias unam mx >ICQ 14757500 Enviado desde el centro de mensajes de CorreoWeb! Obten tu correo electrónico con múltiples beneficios totalmente GRATIS!! http://www.correoweb.com