Ciao a tutti,
seguendo il tutorial della sun volevo scrivere un'applicazione client server in cui in seguito alla richiesta del client, il server comincia a mandare al client dei dati fino a quando il client non gli dice di smettere.

Dal tutorial però riesco solo ad implementare una comunicazione in cui ad una domanda del client si ottiene una (ed una sola) risposta del server, qualunque modifica io provi a fare non mi dà il risultato sperato.

Qualcuno riesce a darmi una dritta?


Classe Server:
codice:
public class KnockKnockServer {

    static boolean attesa = true;
    static String val = "";
    private static PrintWriter out ;
    private static KnockKnockProtocol kkp;

    public static void main (String[] args) throws IOException, NoSuchPortException, PortInUseException {

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

        out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
				new InputStreamReader(
				clientSocket.getInputStream()));
        
        String inputLine, outputLine;

        kkp = new KnockKnockProtocol();

       outputLine = kkp.processInput(null);

        out.println(outputLine);

        while ((inputLine = in.readLine()) != null) {
             System.out.println ( inputLine );
             outputLine = kkp.processInput(inputLine);
             out.println(outputLine);
             out.println( val ) ;

             if (inputLine.equals("Start")){
                       // qui istanzio un oggetto che utilizza il metodo sendData
             }
             else if (inputLine.equals("Stop")){
                  attesa = true;
                  break;
             }

             if (outputLine.equals("Bye."))
                break;
        }

        System.out.println ( "uscito ");
        
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }

    .....

    public void sendData( String st ){
        out.println (kkp.processInput(st ) ) ;
    }
}

Classe Client:
codice:
public class KnockKnockClient {
    public static void main(String[] args) throws IOException {

        Socket kkSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            kkSocket = new Socket("localhost", 4444);
            out = new PrintWriter(kkSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: localhost.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: localhost.");
            System.exit(1);
        }

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String fromServer;
        String fromUser;

        System.out.println ( " entrante ");
        while ((fromServer = in.readLine()) != null) {
            System.out.println("Server: " + fromServer);
            if (fromServer.equals("Bye."))
                break;

            fromUser = stdIn.readLine();
	    if (fromUser != null) {
                System.out.println("Client: " + fromUser);
                out.println(fromUser);
	    }
        }

        System.out.println ( " uscito ");
        out.close();
        in.close();
        stdIn.close();
        kkSocket.close();
    }
}
Classe Protocollo:
codice:
public class KnockKnockProtocol {
    private static final int WAITING = 0;
    private static final int SENTKNOCKKNOCK = 1;
    private static final int SENTCLUE = 2;
    private static final int ANOTHER = 3;

    private static final int NUMJOKES = 5;

    private int state = WAITING;
    private int currentJoke = 0;

    public String processInput(String theInput) {
        String theOutput = null;

        if (state == WAITING) {
            theOutput = "Pronto!";
            state = SENTKNOCKKNOCK;
        } else if (state == SENTKNOCKKNOCK) {
            if (theInput.equalsIgnoreCase("Start")) {
                theOutput = "Started";
                state = SENTCLUE;
            } else {
                theOutput = "Waiting start" ;
            }
        } else if (state == SENTCLUE) {
           if (theInput.equalsIgnoreCase("Stop")) {
                theOutput = "Stopped";
                state = SENTCLUE;
            } else {
                theOutput = "Waiting stop" ;
           }
        }
        else {
            theOutput = theInput;
        }
        return theOutput;
        }

}
Grazie per qualsiasi aiuto!