import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.net.Socket; import java.net.ServerSocket; public class Person_Skeleton extends Thread { Person myPerson; public Person_Skeleton(Person person) { // Get a reference to the business object that this skeleton wraps this.myPerson = person; } public void run() { try { // Create a server socket on port 9000 ServerSocket serverSocket = new ServerSocket(9000); System.out.println("Server Socket Waiting for Connection...."); // Wait for and obtain a socket connection from the stub Socket socket = serverSocket.accept(); System.out.println("Socket Connection Accepted!"); while (socket!=null) { // Create an input stream to receive requests from the stub ObjectInputStream inStream = new ObjectInputStream(socket.getInputStream()); // Read the next method request from the stub String method = (String)inStream.readObject(); if (method.equals("age")) { // Invoke the business method on the server object int age = myPerson.getAge(); // Create an output stream to send return values back to the stub ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream()); outStream.writeInt(age); outStream.flush(); } else if (method.equals("name")) { String name = myPerson.getName(); ObjectOutputStream outStream = new ObjectOutputStream(socket.getOutputStream()); outStream.writeObject(name); outStream.flush(); } } } catch (Throwable t) { System.out.println("Connection Reset!"); //t.printStackTrace(); System.exit(0); } } public static void main(String args[]) { // Obtain a unique Person instance Person person = new Person("David", 99); Person_Skeleton skel = new Person_Skeleton(person); skel.start(); } }