[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]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