[Programación] pasaje de mensajes a un socket

German german_morre en yahoo.com.ar
Vie Feb 29 19:37:02 ARDT 2008


Leonardo Rios escribió:
> Buenas Lista, mi pregunta es como pasar mensajes a traves de SOCKET.
> Es programacion bajo linux. Estoy estudiando bajo el libro de
> Unix_Network_programming y no sale lo que necesito.
> 
> SEgun las funciones recv y send que es para recibir un mensaje de un
> socket conectado y enviar un mensaje a un socket respectivamente.
> 
> Ahora mi pregunta los descriptores de archivos deben ser iguales o !=.
> 
> el siguiente escenario es:
> 
>          cliente                  /         servidor
>                                      /
>           send();                /          recv();
>                                      /
>                                      /
>                                      /
> 
> 
> * los fd tanto del cliente como del servidor deben ser iguales ????
> * el mensaje se debe almacenar en un char MENSAJE[100]; ???????
> * el buffer tiene que ser leido y escrito por ambos??? char buffer[100];
> 
> si tienen un pedazo de codigo implementado estaria copado que me lo adjuntasen
> 
> 
> 

Hola Leonardo,

Hace alguno tiempo implemente una comunicacion via sockets entre 
aplicaciones y me guie con este articulo :

http://linuxgazette.net/issue74/tougher.html

Los ejemplos son en c++, porque es el lenguaje en que programo, pero los 
ejemplos bien podrian portarse a c, o cualquier otro lenguaje.

En mi caso implemente la funcionalidad de servidor y cliente en la misma 
aplicacion, de manera que una instancia podia pasarle mensajes a otra. 
Es decir, no habia una aplicacion cliente diferente de la servidor.

La cosa se complico cuando quise hacer que la aplicacion servidor 
escuchara un puerto determinado y al iniciar una comunicacion con el 
cliente volviera inmediatamente a escuchar, para eso habia que crear un 
nuevo proceso y..., en definitiva demasiado para lo que yo pretendia.

En el caso de necesitar tener una aplicacion servidor dedicada y que 
permita multiples concecciones existe la posibilidad de hacer algo bien 
sencillo, que tome como entrada todo lo que le llega al stdin y devuelva 
por stdout, luego la registras en el etc/services y inetd se encarga del 
resto, pero esa es otra historia... (recuerdo haberlo probado, pero no 
logro encontrar el codigo por ningun lado!)

Espero que te sirva.

Saludos

German



Más información sobre la lista de distribución Programacion