Foros del Web » Programación para mayores de 30 ;) » C/C++ »

comunicacion entre procesos

Estas en el tema de comunicacion entre procesos en el foro de C/C++ en Foros del Web. Hola escribo este mensaje porque necesito desarrollar un sistema de comunicacion entre dos programas que corren bajo windows con las siguientes caracteristicas. 1. Deteccion y ...
  #1 (permalink)  
Antiguo 18/03/2014, 07:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 49
Antigüedad: 12 años, 11 meses
Puntos: 0
comunicacion entre procesos

Hola escribo este mensaje porque necesito desarrollar un sistema de comunicacion entre dos programas que corren bajo windows con las siguientes caracteristicas.

1. Deteccion y correccion de errores.
2. Canal cifrado.
3. Acceso local unicamnete.

la primera idea que se me ocurrio fue utilizar sockets del tipo AF_UNIX pero asta donde he investigado no son soportador por windows a pesar que la palabra AF_UNIX esta definida en winsock.h (CURIOSO).

los socketes me satisfacen los primeros 2 puntos, pero tengo una duda respecto al tersero ya que es muy importante que no se pueda acceder al proceso host dede fuera del PC donde corre la aplicacion.

Si AF_UNIX no se soporta en windows tendre que recurrir al AF_INET de siempre configurando el host con la direccion ip 127.0.0.1...... pero no estoy del todo seguro que esto limite el acceso desde fuera del pc lo que es muy importante.

Alguien pordria aclarar esta duda???


se que existen otros metodos de comunicacion como los pipes pero no tengo ninguan experiencia manejandolos...son mejores que los sockets??? valdria la pena implementarlos en vez estos.

Gracias y astaluego.
  #2 (permalink)  
Antiguo 20/03/2014, 16:37
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: comunicacion entre procesos

"...pero no estoy del todo seguro que esto limite el acceso desde fuera del pc lo que es muy importante..."

Bueno, una aplicacion hará de servidor y la otra de cliente, en el momento de recibir una conexion el servidor debe comprovar que el cliente viene de su misma ip, si no es asi cierra el socket y ya está.

Si lo haces con pipes tambien usaras el mismo modelo: una aplicacion hará de servidor de pipes y la otra de cliente, y al igual que los sockets una pipe cliente tambien puede conectarse a un pipe servidor abierto en otro pc. Seguramente en la msdn tendras mas informacion i mas detallada acerca de todo esto.

Busca el ejemplo basico de pipes, este sería un servidor (lo mas basico y sin control de errores, solo para ver como funciona):

Código C:
Ver original
  1. char buffer[512];
  2. unsigned long dw;
  3. HANDLE hPipe = CreateNamedPipe(
  4.                 "\\\\.\\pipe\\demopipe",
  5.                 PIPE_ACCESS_DUPLEX,
  6.                 PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,
  7.                 PIPE_UNLIMITED_INSTANCES,
  8.                 BUFSIZE,
  9.                 BUFSIZE,
  10.                 PIPE_TIMEOUT,
  11.                 0);
  12.  
  13. if(ConnectNamedPipe(hPipe, 0)) {//esto equivale al accept
  14.     ReadFile(hPipe, buffer, 512, &dw, 0);//esto equivale al recv
  15.     //aqui va la evaluacion de la peticion
  16.     WriteFile(hPipe, "dato", 4, &dw, 0);//y esto equivale al send
  17. }
  18.  
  19. FlushFileBuffers(hPipe);
  20. DisconnectNamedPipe(hPipe);
  21. CloseHandle(hPipe);

Y este un cliente:

Código C:
Ver original
  1. unsigned long dw;
  2. char buffer[512];
  3. HANDLE hPipe = CreateFile("\\\\.\\pipe\\demopipe", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
  4.  
  5. if(!WaitNamedPipe("\\\\.\\pipe\\demopipe", 10000))
  6.     //pipe no disponible
  7. }
  8. else {
  9.     dw = PIPE_READMODE_MESSAGE;
  10.     SetNamedPipeHandleState(hPipe, &dw, 0, 0);
  11.  
  12.     WriteFile(hPipe, "hola", 4, &dw, 0);
  13.     ReadFile(hPipe, buffer, 512, &dw, 0);
  14. }
  15.  
  16. CloseHandle(hPipe);

Observa la similitud que hay en el funcionamiento de los pipes con los sockets. Observa que el cliente accede al pipe con CreateFile, y esta funcion te permite definir permisos de seguridad. Revisa algun manual de win32 para obtener mas informacion acerca de las funciones usadas. Lo demas es lo mismo en ambos casos: puedes cifrar los datos, puedes definir un protocolo para organizar los tramites, etc...

Saludos
vosk
  #3 (permalink)  
Antiguo 24/03/2014, 19:11
 
Fecha de Ingreso: mayo-2011
Mensajes: 49
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: comunicacion entre procesos

Muy agradecido vosk por su respuesta creia que ya no iva a tener ninguna ...

Con respecto al tema creo que me inclino por lo que ya cononosco (sockets) a pesar de la similitud entre los pipes y estos ..lo de la direccion ip es una solucion logica que no se me habia ocurrido.

Aun no marco el tema como solucionado asta que tenga algo desarrollado..

Gracias por su tiempo y astaluego.

Etiquetas: comunicacion, procesos, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:26.