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

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

Re: Sockets en C....



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



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