Java tutorial
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(); } }