public static void main(String[] args) throws IOException {
		String host = args[0];
		int port = Integer.parseInt(args[1]);
		String serviceName = args[2];
		BufferedReader in = new BufferedReader(new FileReader(args[3]));

		// locate the registry and get ror.
		RMIRegistryClient registry = RMIRegistryClient.getRegistry(host, port);
		ZipCodeServer zcs;
		try {
			zcs = (ZipCodeServer) registry.lookup(serviceName, "ZipCodeServerImpl");
			
			// reads the data and make a "local" zip code list.
			// later this is sent to the server.
			// again no error check!
			ZipCodeList l = null;
			boolean flag = true;
			while (flag) {
				String city = in.readLine();
				String code = in.readLine();
				if (city == null)
					flag = false;
				else
					l = new ZipCodeList(city.trim(), code.trim(), l);
			}
			// the final value of l should be the initial head of
			// the list.

			// we print out the local zipcodelist.
			System.out.println("This is the original list.");
			ZipCodeList temp = l;
			while (temp != null) {
				System.out.println("city: " + temp.city + ", " + "code: "
						+ temp.ZipCode);
				temp = temp.next;
			}

			// test the initialise.
			zcs.initialise(l);
			System.out.println("\n Server initalised.");

			// test the find.
			System.out.println("\n This is the remote list given by find.");
			temp = l;
			while (temp != null) {
				// here is a test.
				String res = zcs.find(temp.city);
				System.out.println("city: " + temp.city + ", " + "code: " + res);
				temp = temp.next;
			}

			// test the findall.
			System.out.println("\n This is the remote list given by findall.");
			// here is a test.
			temp = zcs.findAll();
			while (temp != null) {
				System.out.println("city: " + temp.city + ", " + "code: "
						+ temp.ZipCode);
				temp = temp.next;
			}

			// test the printall.
			System.out.println("\n We test the remote site printing.");
			// here is a test.
			zcs.printAll();
			
		} catch (Remote440Exception e) {
			e.printStackTrace();
		}

		
	}