Alguien tiene idea de sockets en C?

Muy buenas.No se si habrá alguien que pueda responder a mi duda pero bueno.
Pues intento hacer un pequeño "chat" por llamarlo de alguna manera, solo sirve para dos personas, una es el cliente y otra el servidor, y pretendo que cuando alguien escriba algo y pulse intro en la consola le llegue al otro, y viceversa.

El cliente no es mas que esto

Cliente escribió:#include
#include
#include

main()
{
char mensaje[100];
int conexion=socket(AF_INET, SOCK_STREAM, 0);
int addr_len = sizeof(struct sockaddr);
struct sockaddr_in cliente;

cliente.sin_family = AF_INET;
cliente.sin_port = htons(3490);
cliente.sin_addr.s_addr = inet_addr("192.168.1.105");

connect (conexion, (struct sockaddr*)&cliente, addr_len);
while (1)
{
read (conexion, mensaje, sizeof(mensaje));
printf("%s\n",mensaje);
}
}


En el bucle infinito se ve claramente que no hace mas que leer y leer todo lo que le envíe el servidor. El codigo del servidor es parecido, solo cambia la configuracion del socket en si (ya que necesita ponerse a escuchas, etc etc) y el bucle, que es un bucle infinito con scanf.

Pues bueno lo que no se es como hacer que los dos envien y reciban, en el mismo bucle no podría hacer nada, un scanf se quedaría esperando a que escribas algo, mientras tanto el programa se queda parado (y no recibe nada). Y un read te para el programa tambien hasta recibir algo, asique más de lo mismo.

En fin, que ni idea :P
Lo más fácil es usar select, otra opción es usar threads.

- ferdy
Muchas gracias a los dos, he encontrado información acerca de los threads (que no sabia ni que existian) y parece sumamente útil, justo lo que necesito.
Yo recuedo que lo hice con select y aunque parece engorroso, suele ser una forma muy "limpia" de hacer lo que quieres. Podrias echarle un vistazo, por si te convence mas :)

Un saludo.
La verdad es que el select es mucho más difícil de usar que los threads, pero me he quedado con el primero (tras probar los dos).
Imagino que es mucho mejor que tener tantos hilos como clientes conectados al servidor y un bucle infinito en cada uno :p

Un saludo y gracias de nuevo
Por lo general, los threads son mucho más difíciles de usar bien que select.

- ferdy
6 respuestas