Questa classe qui rappresenta l'implementazione di GreetingService e si trova nel package server del progetto GWT.

codice:
package com.progettonm.server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Hashtable;

import com.progettonm.client.GreetingService;
import com.progettonm.server.idclient.IdentificatoreClient;
import com.progettonm.server.infopc.InformazioniPC;
import com.progettonm.server.messaggio.MessTabellaClientDist;
import com.progettonm.shared.FieldVerifier;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

/**
 * The server side implementation of the RPC service.
 */
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
		GreetingService {

	public Hashtable<IdentificatoreClient, InformazioniPC> greetServer() throws IllegalArgumentException {
		/*Come prima cosa mi devo collegare al server.*/
		/*
		 * Qui viene creata la socket che permette al cilent amministrativo di
		 * connettersi al server centralizzato.Lui deve collegarsi alla server Socket con numero di porta 8004 poiche e quella
		 * la serverSocket addetta all'accettazione delle connessioni da parte dei client amministrativi. 
		 * Il metodo ritorna il numero di porta del client amministrativo,se tale progetto deve funzionare
		 * su più macchine allora mi farò tornare l'identificatore client, il quale ci è utile nei successvi
		 * metodo per creare le socket.
		 */
		/*Va dentro un metodo chiamato selezione scelta.*/
	     Socket cac=null;
	     
		  try {

			
			InetSocketAddress indirizzoServer = new InetSocketAddress(
					"localhost", 8004);
			 cac = new Socket();
			cac.connect(indirizzoServer);
		
		  
		  }
		  
		  catch (Exception e) {
		e.printStackTrace();
		}
			System.out.println("Connessione con il server creata:");

			/*
			 * Qui vengono presi gli output ed input stream del socket i quali
			 * servono per mandare informazioni,nel nostro caso messaggi, al
			 * server.Ecco perchè utilizziamo gli Object stream
		 */
			ObjectOutputStream outCa=null;	
			ObjectInputStream inCa=null;
			
	try {



		 outCa = new ObjectOutputStream(cac.getOutputStream());
	 inCa= new ObjectInputStream(cac.getInputStream());
			
	} 

	catch (Exception e) {
	e.printStackTrace();
	}

			
		
			
			System.out.println("Creati gli stream che mi permettono di comunicare con il server.");
	/*Devo leggere il la tabella dei distributi dal server e stamparla a video. */
			
	Object messaggioTabellaClientD=null;		

		try {
			messaggioTabellaClientD=inCa.readObject();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		/*Ora controllo se il messaggio ricevuto è il messaggio MessTabellaClientDist che contiene
		 * la tabella con i client distributi.*/
		Hashtable<IdentificatoreClient, InformazioniPC> tabellaDistribuiti=null;
		
		if(messaggioTabellaClientD instanceof MessTabellaClientDist){
			MessTabellaClientDist tabellaClientD= (MessTabellaClientDist) messaggioTabellaClientD;
			/*Stampo l'hashtable*/
	     	 tabellaDistribuiti = tabellaClientD.getHashtableCD();
			
			
	           /*
	           * qui creo i 2 oggetti Enumeration che contengo le informazioni
	           * presenti nella tabella*/
		
		
		
	  Enumeration chiavi = tabellaDistribuiti.keys();
	    Enumeration informazioni = tabellaDistribuiti.elements();

	     /*
	      * Qui stampo a video le informazioni chiave valore della
	     * tabella*/

	       while (chiavi.hasMoreElements()
	 		&& informazioni.hasMoreElements()) {

	        System.out.println("Chiave:"+ (IdentificatoreClient) chiavi.nextElement());
	         System.out.println("Info:" + informazioni.nextElement());

	              }
	       System.out.println("Visualizzazione avvenuta con successo!");
		
		    
		}
		
		
		
		return tabellaDistribuiti;
			
}
}