"...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 originalchar buffer[512];
unsigned long dw;
HANDLE hPipe = CreateNamedPipe(
"\\\\.\\pipe\\demopipe",
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
BUFSIZE,
BUFSIZE,
PIPE_TIMEOUT,
0);
if(ConnectNamedPipe(hPipe, 0)) {//esto equivale al accept
ReadFile(hPipe, buffer, 512, &dw, 0);//esto equivale al recv
//aqui va la evaluacion de la peticion
WriteFile(hPipe, "dato", 4, &dw, 0);//y esto equivale al send
}
FlushFileBuffers(hPipe);
DisconnectNamedPipe(hPipe);
CloseHandle(hPipe);
Y este un cliente:
Código C:
Ver originalunsigned long dw;
char buffer[512];
HANDLE hPipe = CreateFile("\\\\.\\pipe\\demopipe", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if(!WaitNamedPipe("\\\\.\\pipe\\demopipe", 10000))
//pipe no disponible
}
else {
dw = PIPE_READMODE_MESSAGE;
SetNamedPipeHandleState(hPipe, &dw, 0, 0);
WriteFile(hPipe, "hola", 4, &dw, 0);
ReadFile(hPipe, buffer, 512, &dw, 0);
}
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