[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