Como ya te ha dicho egostar, lo normal es que un programa envié ordenes y el otro las ejecute. Lo que no veo tan normal es la "ejecución sincronizada", es decir, si la consecuencia de usar un botón es, por ejemplo, borrar cierto archivo ¿quieres que el archivo se borre en los dos equipos? ¿solo en el remoto? ¿en uno si y en el otro no?, etc ...
Lo mejor es utilizar el esquema que proponíamos al principio. Un programa ordena y el otro obedece. Hacer algo así no supone mucha complicación, de hecho, es bastante sencillo. Así que si explicas un poco mas el asunto nos podemos poner manos a la obra ...