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

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

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]