[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Re: Sockets en C....



Le di una ojeada super rápida a esto, y así a simple vista te comento que,
si mal no recuerdo, sendto no se usa con SOCK_STREAM. sendto es para udp, tu
deberías estar usando send().

Saludos,
-----Original Message-----
From: fito <fito en telebot net>
To: linux-ayuda en nuclecu unam mx <linux-ayuda en nuclecu unam mx>
Date: Sunday, July 11, 1999 8:04 PM
Subject: Sockets en C....


>
> 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
>



[Hilos de Discusión] [Fecha] [Tema] [Autor]