Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100

    [java]esercizio Client Server Tcp

    CIAO prima di tutto auguri di buon natale a tutto il forum.
    ho da fare un esercizio di comunicazione client server tcp.
    Un asta elettronica
    il client:
    -ha un budget disponibile
    -il client puo volere sapere dal server l offerta migliore attiva(premo 1)
    -puo rilanciare l offerta (premo 2)
    -puo uscire(premo 0)


    al server gli arriva un intero
    -se vale 1 vuol dire che devo mandare al client la migliore offerta attiva
    -se vale 2 vuol dire che il client sta cercando di rilancire l offerta,quindi leggo un altro intero lo confronto con la migliore offerta e in caso positivo aggiorno l offerta migliore con quella mandata dal client e gli invio al client n boolean=true per avvertirlo dell esito positivo dell offerta, in caso negativo gli mando false

    per l input da linea di comando mi servo di una classe Input consegnata dal prof;
    gli interi che via via si mandando client e server devono essere mandati come oggetti(per esercitarmi).

    per stampare ogni volta il menu mi appoggio a una classe utils:
    codice:
    
    public class utils {
    public static void stampa(){
    	System.out.println("premere i seguenti tasti");
    	System.out.println(" 1  : conoscere offerta massima corrente");
    	System.out.println(" 2  : Rilanciare l offerta");
    	System.out.println("0   : uscire");
    }
    }
    ecco il mio codice
    :

    client



    codice:
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    
    public class cli {
    	public static void main(String []args){
    		int budget=5000;//IMPOSTAZIONE BUDGET
    		int porta=3575;//PORTA SERVER
    		try {
    			InetAddress ia=InetAddress.getLocalHost();
    			Socket socket=new Socket(ia,porta);
    			System.out.println("Benvenuti");
    			utils.stampa();
    			int scelta;
    			scelta=Input.readInt();
    			ObjectInputStream in=new ObjectInputStream(socket.getInputStream());
    			ObjectOutputStream op=new ObjectOutputStream(socket.getOutputStream());
    			while(scelta!=0){
    				switch(scelta){
    				case 1:
    					System.out.println("");
    					System.out.println("");
    					op.writeObject((Integer)scelta);
    					int max=(Integer)in.readObject();
    
    					System.out.println("Offerta massima corrente é"+max);
    					System.out.println("");
    					System.out.println("");
    					utils.stampa();
    
    					scelta=Input.readInt();
    				case 2:
    					op.writeObject((Integer)scelta);
    					System.out.println("");
    					System.out.println("");
    					System.out.println("Di quanto vuoi rilanciare ?");
    					int rilancio=Input.readInt();
    					op.writeObject((Integer)rilancio);
    					boolean operazione=(Boolean)in.readObject();
    					if(operazione)
    						System.out.println("operazione andata in porto");
    					else
    						System.out.println("operazione non andata in porto rilancio < offerta attuale");
    
    					System.out.println("");
    					System.out.println("");
    					utils.stampa();
    
    					scelta=Input.readInt();
    				}
    			}
    		} catch (UnknownHostException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }


    CODICE SERVER:

    codice:
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    public class ServerAsta {
    	public static void main(String []args){
    		int current=0;//MIGLIORE OFFERTA
    		int comando;
    		ServerSocket server;
    		try {
    			server = new ServerSocket(3575);
    			Socket clientsocket=server.accept();
    			ObjectInputStream in = new ObjectInputStream(clientsocket.getInputStream());
    			ObjectOutputStream outuput = new ObjectOutputStream(
    					clientsocket.getOutputStream());
    			while(true){
    				comando=(Integer)in.readObject();
    				switch (comando){
    				case 1:
    					outuput.writeObject((Integer)current);
    				case 2:
    					int rilancio=(Integer)in.readObject();
    					if(rilancio >current)
    					{	outuput.writeObject((Boolean)true);
    					current=rilancio;
    					}
    					else outuput.writeObject((Boolean)false);
    				}
    
    			}
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    	}
    }

    SE MANDO IN ESECUZIONE (PRIMA SERVER POI CLIENT!):
    sia se premo 1 che se premo 2 nella shell del client, il client mi rimane in attesa e non arriva nessuna risposta del server

    PLEASE HELP ME
    df

  2. #2
    Auguri di Buon Natale.

    Ritornando all'esercizio, credo che il server debba essere multi-thread in modo da garantire una reale asta dove più client fanno diverse offerte e possono interrogare il server contemporaneamente.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    ok su quello hai ragione ma supponiamoc he voglia ancora semplificare il problema, e che il server serva un solo client alla volta, come mai non funziona il programma?
    df

  4. #4
    Intanto l'operazione di cast nel momento in cui invii i dati è assoultamente inutile e sbagliata!
    Mi riferisco a:
    codice:
    outuput.writeObject((Integer)current);
    outuput.writeObject((Boolean)false);
    ...
    ed altri cast inutili nel codice del server e del client.

    sia se premo 1 che se premo 2 nella shell del client, il client mi rimane in attesa e non arriva nessuna risposta del server
    I dati arrivano al server?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    1)cioè ?
    spiegati meglioo..
    2)come faccio avedere se arrivano i dati al server
    df

  6. #6
    Fai stampare al server un messaggio di debug qualunque dopo che è stato invocato il readObject.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    ho messo delle stampe di debug


    server = new ServerSocket(8000);
    --> System.out.println("-1");

    Socket clientsocket=server.accept();
    -----> System.out.println("0");

    ObjectInputStream in = new ObjectInputStream(clientsocket.getInputStream());
    ObjectOutputStream outuput = new ObjectOutputStream(
    clientsocket.getOutputStream());
    while(true){
    comando=(Integer)in.readObject();
    ---> System.out.println("1");


    -1 lo stampa
    0 idem
    ma 1 no quindi vol dire che il server si blocca alla readObject.... come mai?
    df

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Se sul server apri prima l'InputStream e dopo l'OutputStream della socket, nel client devi fare il contrario, altrimenti si pianta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Originariamente inviato da esoni
    ma 1 no quindi vol dire che il server si blocca alla readObject.... come mai?
    No era giusto per verificare se gli stream effettivamente funzionavano. Comunque facendo come ha detto lele il problema si risolve. Magari in futuro ricorda sempre di istanziare prima l'ObjectOutputStream prima dell'ObjectInputStream indipendentemente dal contesto in cui ti trovi.

    Aggiungo che dovresti fare uso anche del metodo flush(), ed invocarlo dopo ogni write.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.