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;