Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Chat client server

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    97

    Chat client server

    Salve amici sto riscontrando un problema nella realizzazione di questo semplice programma

    Client:
    codice:
    importjava.io.BufferedReader;import java.io.InputStreamReader;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner;
    
    class ClientTCP {
    
        public static void main (String[] args) throws IOException {
    
        	String msg, msg2;
        	final int YOU = 0;
        	final int PEER = 1;
        	final int EXIT = 2;
        	int status = YOU;
    //long off;
    
        	Socket clientSocket = new Socket("127.0.0.1", 6789); 
    
        	Scanner scriveClient = new Scanner(System.in); 
    
        	Scanner leggeServer = new Scanner (clientSocket.getInputStream()); 
    
            PrintStream outToServer = new PrintStream(clientSocket.getOutputStream()); 
    		while(status != EXIT) {
            switch(status) {
    case YOU:	// client scrive
            		System.out.print("YOU> ");
                    msg = scriveClient.nextLine();	
    
    
    // fa un controllo sul msg, se c'è il punto il client si deve disconnettere
                    CharSequence cs = ".";
                    if(msg.contains(cs)) {
                 	   status = EXIT;
                 	   break;
                    }
    
    
    
    
                    outToServer.println(msg);	// ilmessaggiovienemandatoal server
                    status = PEER;
                    break;
    
            	case PEER:	// client legge
            		msg2 = leggeServer.nextLine();
            		System.out.println("PEER> " + msg2);
            		status = YOU;
            		break;
            }
    	}
    
            System.out.println("Il server si è disconnesso!!!!!");
            clientSocket.close(); 
        }
    }



    Server:
    codice:
    import java.net.ServerSocket;import java.net.Socket;
    import java.util.Scanner;
    
    import java.io.IOException;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    
    class ServerTCP {
    
        public static void main (String[] args) throws IOException {
        		String msg, msg2;
        		final int YOU = 0;
            	final int PEER = 1;
            	final int EXIT = 2;
            	int status = PEER;
        		String c;
        		String c2;
    
    
        		ServerSocket welcomeSocket = new ServerSocket(6789); 
    
        		Scanner scriveServer = new Scanner(System.in); 
    
        		Socket connectionSocket = welcomeSocket.accept(); 
    
        		Scanner leggiClient = new Scanner(connectionSocket.getInputStream()); 
    
        		PrintStream outToClient = new PrintStream(connectionSocket.getOutputStream());
        		while(status != EXIT) {
        		 switch(status) {
                	case YOU:	// server scrive
                		System.out.print("You> ");
                        msg = scriveServer.nextLine();	
                        outToClient.println(msg);	
                        status = PEER;
                        break;
    
                	case PEER:	// server legge
                		msg2 = leggiClient.nextLine();
                		System.out.println("Peer> " + msg2);
                		status = YOU;
                		break;
                }
        	}
        		System.out.println("Il client si è disconnesso!!!!");
    //	connectionSocket.close(); // e chiudo la connessione	
    
          }
        }
    Il problema che sto riscontrando è il seguente: il client nel momento in cui digita il . sta dicendo che vuole disconnettersi dal server, pertanto al server deve arrivare un messaggio del tipo "Il client si è disconnesso" e deve cessare la comunicazione.La stessa cosa la dovrò implementare anche per il server e così via.Per il momento ho implementato questo codice dal lato client
    codice:
     CharSequence cs = ".";                if(msg.contains(cs)) {
                 	   status = EXIT;
                 	   break;
                    }
    però quando digito il punto mi solleva questa eccezione:

    Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1516)
    at es3_5modificato.ServerTCP.main(ServerTCP.java:43)
    Qualche consiglio pervafore??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Innanzitutto perché c'è la "dualità" YOU/PEER ? Di per sé non servirebbe affatto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    97
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Innanzitutto perché c'è la "dualità" YOU/PEER ? Di per sé non servirebbe affatto.
    lo so però l'esercizio lo richiedeva.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da gigimac Visualizza il messaggio
    però quando digito il punto mi solleva questa eccezione:

    Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1516)
    at es3_5modificato.ServerTCP.main(ServerTCP.java:43)
    Qualche consiglio pervafore??
    Questo errore, se guardi bene nello stack trace, è sul server. E succede perché nel client chiudi immediatamente la connessione mentre il server è ancora lì in attesa nella nextLine().
    Quindi o fai in modo che il server sia in grado di gestire NoSuchElementException (interpretando questo come "la comunicazione è chiusa") oppure, meglio, fai in modo che il "." arrivi anche al server in modo che possa terminare più "graziosamente".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    97
    Ho corretto il codice però ora non capisco perché quando vado a scrivere il messaggio (dal lato server), premo invio e non succede nulla.
    Ti ripropongo i due file:
    Client:
    codice:
    class ClientTCP {
        public static void main (String[] args) throws IOException {
    
        	String msg, msg2;
        	final int YOU = 0;
        	final int PEER = 1;
        	final int EXIT = 2;
        	int status = YOU;
    //long off;
    
        	Socket clientSocket = new Socket("127.0.0.1", 6789); 
    
        	Scanner scriveClient = new Scanner(System.in); 
    
        	Scanner leggeServer = new Scanner (clientSocket.getInputStream()); 
    
            PrintStream outToServer = new PrintStream(clientSocket.getOutputStream()); 
    		while(status != EXIT) {
            switch(status) {
    case YOU:	// client scrive
    
    
                    do {
            			System.out.print("YOU> "); 
            			msg = scriveClient.nextLine();
            			outToServer.println(msg);	// il messaggio viene mandato al server
            			status = PEER;
            		 } while (!msg.endsWith(".")); 
                    status = EXIT;
                    break;
    
    
    
    
    
    
    
            	case PEER:	// client legge
            		msg2 = leggeServer.nextLine();
            		System.out.println("PEER> " + msg2);
            		status = YOU;
            		break;
            }
    	}
    
            System.out.println("Il client si è disconnesso!!!!!");
            clientSocket.close(); 
        }
    }

    Server:
    codice:
    class ServerTCP {
        public static void main (String[] args) throws IOException {
        		String msg, msg2;
        		final int YOU = 0;
            	final int PEER = 1;
            	final int EXIT = 2;
            	int status = PEER;
        		String c;
        		String c2;
    
    
        		ServerSocket welcomeSocket = new ServerSocket(6789); 
    
        		Scanner scriveServer = new Scanner(System.in); 
    
        		Socket connectionSocket = welcomeSocket.accept(); 
    
        		Scanner leggiClient = new Scanner(connectionSocket.getInputStream()); 
    
        		PrintStream outToClient = new PrintStream(connectionSocket.getOutputStream());
        		while(status != EXIT) {
        		 switch(status) {
                	case YOU:	// server scrive
                		System.out.print("You> ");
                        msg = scriveServer.nextLine();	
                        outToClient.println(msg);	
                        status = PEER;
                        break;
    
                	case PEER:	// server legge
                		msg2 = leggiClient.nextLine();
                		if(msg2.endsWith(".")) {
                			status = EXIT;
                			break;
                		}
                		System.out.println("Peer> " + msg2);
                		status = YOU;
                		break;
                }
        	}
        		System.out.println("Il client si è disconnesso!!!!");
        		connectionSocket.close(); // e chiudolaconnessione
    
          }
        }

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Se nel client non vedi nulla probabilmente è perchè non stai leggendo dallo stream di rete.
    Non sono certo di aver centrato il problema, non posso guardare bene il codice.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    97
    La cosa strana è che se non faccio il controllo del punto finale(per capire se il client vuole disconnettersi), funziona tutto bene.
    Se invece aggiungo questo controllo si presenta questo problema

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    97
    help me!!!

  9. #9
    Quote Originariamente inviata da gigimac Visualizza il messaggio
    La cosa strana è che se non faccio il controllo del punto finale(per capire se il client vuole disconnettersi), funziona tutto bene.
    Se invece aggiungo questo controllo si presenta questo problema
    Questo cosa ti fa pensare?

    A me farebbe pensare che la riga che il server legge non finisce col punto.. prova a fare l'output di quella stringa vedi se effettivamente la stringa che gli arriva finisce con il punto oppure no.
    lolide
    Java Programmer

    Informati

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    97
    Quote Originariamente inviata da lolide Visualizza il messaggio
    Questo cosa ti fa pensare?

    A me farebbe pensare che la riga che il server legge non finisce col punto.. prova a fare l'output di quella stringa vedi se effettivamente la stringa che gli arriva finisce con il punto oppure no.
    Ciao IOLIDE grazie per avermi risposto
    Forse non sono stato bravo a spiegare il mio problema, il funzionamento è questo:
    (consideriamo di non premere il punto in fase di scrittura e quindi supponiamo che vogliono scambiarsi dei messaggi senza voler terminare la conversazione)

    client> ciao
    server> ehy ciao come stai?
    (premo invio per inviare il messaggio sul client e non succede nulla, va alla riga di sotto e il programma mi permette di ostinare a scrivere ma non manda il messaggio al server)

    Questo è il mio problema, la cosa strana che se a livello implementativo tolgo quel pezzo di codice che effettua il controllo del punto, funziona alla perfezione. Allego i due file java
    File allegati File allegati
    Ultima modifica di gigimac; 06-01-2014 a 13:27

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 © 2025 vBulletin Solutions, Inc. All rights reserved.