[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