The precompiler generates several Java files that implement network-related operations on fan objects. It finds the remote object and invokes a method. It accepts the object name and a command on the command line. The client initializes the ORB and obtains a reference to the naming service. The naming service is like a directory where the server can publish remote objects.
Clients consult the directory to obtain a reference to specific objects.
Finally, it uses the naming service to obtain a reference to a remote object. Once the client has a reference to a remote object, it uses it like a local object. The server isn't much more difficult. Consider how much code would be required to achieve the same result with low-level sockets. Next, it registers the object with the name service so that clients can find it.