| 
     
      
 
 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Iterator; 
import java.util.Vector; 
 
class ComplexCompany implements Serializable { 
  private String name; 
 
  private ComplexEmployee president; 
 
  private Vector departments; 
 
  public ComplexCompany(String name) { 
    this.name = name; 
    departments = new Vector(); 
  } 
 
  public String getName() { 
    return this.name; 
  } 
 
  public void addDepartment(ComplexDepartment dept) { 
    departments.addElement(dept); 
  } 
 
  public ComplexEmployee getPresident() { 
    return this.president; 
  } 
 
  public void addPresident(ComplexEmployee e) { 
    this.president = e; 
  } 
 
  public Iterator getDepartmentIterator() { 
    return departments.iterator(); 
  } 
 
  public void printCompanyObject() { 
    System.out.println("The company name is " + getName()); 
    System.out.println("The company president is " + getPresident().getName()); 
    System.out.println(" "); 
 
    Iterator i = getDepartmentIterator(); 
    while (i.hasNext()) { 
      ComplexDepartment d = (ComplexDepartment) i.next(); 
      System.out.println("   The department name is " + d.getName()); 
      System.out.println("   The department manager is " + d.getManager().getName()); 
      System.out.println(" "); 
    } 
  } 
 
} 
 
class ComplexDepartment implements Serializable { 
  private String name; 
 
  private ComplexEmployee manager; 
 
  public ComplexDepartment(String name) { 
    this.name = name; 
  } 
 
  public String getName() { 
    return this.name; 
  } 
 
  public ComplexEmployee getManager() { 
    return this.manager; 
  } 
 
  public void addManager(ComplexEmployee e) { 
    manager = e; 
  } 
} 
 
class ComplexEmployee implements Serializable { 
  private String name; 
 
  private int salary; 
 
  /** Creates a new instance of ComplexEmployee */ 
  public ComplexEmployee(String name, int salary) { 
    this.name = name; 
    this.salary = salary; 
  } 
 
  public String getName() { 
    return name; 
  } 
 
  public int getSalary() { 
    return this.salary; 
  } 
} 
 
public class ComplexSocketServer { 
 
  public static void main(String args[]) throws Exception { 
    ServerSocket servSocket; 
    Socket fromClientSocket; 
    int cTosPortNumber = 1777; 
    String str; 
    ComplexCompany comp; 
 
    servSocket = new ServerSocket(cTosPortNumber); 
    System.out.println("Waiting for a connection on " + cTosPortNumber); 
 
    fromClientSocket = servSocket.accept(); 
 
    ObjectOutputStream oos = new ObjectOutputStream(fromClientSocket.getOutputStream()); 
 
    ObjectInputStream ois = new ObjectInputStream(fromClientSocket.getInputStream()); 
 
    while ((comp = (ComplexCompany) ois.readObject()) != null) { 
      comp.printCompanyObject(); 
 
      oos.writeObject("bye bye"); 
      break; 
    } 
    oos.close(); 
 
    fromClientSocket.close(); 
  } 
} 
 
 
 
 
 
public class ComplexSocketClient { 
 
  public static void main(String args[]) throws Exception { 
    Socket socket1; 
    int portNumber = 1777; 
    String str = ""; 
 
    socket1 = new Socket(InetAddress.getLocalHost(), portNumber); 
 
    ObjectInputStream ois = new ObjectInputStream(socket1.getInputStream()); 
 
    ObjectOutputStream oos = new ObjectOutputStream(socket1.getOutputStream()); 
 
    ComplexCompany comp = new ComplexCompany("A"); 
    ComplexEmployee emp0 = new ComplexEmployee("B", 1000); 
    comp.addPresident(emp0); 
 
    ComplexDepartment sales = new ComplexDepartment("C"); 
    ComplexEmployee emp1 = new ComplexEmployee("D", 1200); 
    sales.addManager(emp1); 
    comp.addDepartment(sales); 
 
    ComplexDepartment accounting = new ComplexDepartment("E"); 
    ComplexEmployee emp2 = new ComplexEmployee("F", 1230); 
    accounting.addManager(emp2); 
    comp.addDepartment(accounting); 
 
    ComplexDepartment maintenance = new ComplexDepartment("Maintenance"); 
    ComplexEmployee emp3 = new ComplexEmployee("Greg Hladlick", 1020); 
    maintenance.addManager(emp3); 
    comp.addDepartment(maintenance); 
 
    oos.writeObject(comp); 
 
    while ((str = (String) ois.readObject()) != null) { 
      System.out.println(str); 
      oos.writeObject("bye"); 
 
      if (str.equals("bye")) 
        break; 
    } 
 
    ois.close(); 
    oos.close(); 
    socket1.close(); 
  } 
 
} 
 
    
     
     
     
     
   
    
    |