En la clase cliente, cuando haces:
IRemote msg=(IRemote)Naming.lookup("//localhost");
El metodo Naming.lookup devulve un objeto Remote y como creaste tu propia interface IRemote que extiende de Remote, en realidad estas tratando de castear una super clase a una subclase, por eso sale una exception de tipo ClassCast
Como analogia, esto equivaldria a hacer algo asi
class Auto { ... }
class Ferrari extends Auto { ... }
//...
Auto a = new Auto();
Ferrari f = (Ferrari)a;