Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    50

    [JAVA] Inviare Stringhe tramite socket

    Salve, ho un problemino nell' invio di stringhe dal server al client

    server :
    codice:
    public void run() {
    
    	if (socket.isConnected()) {
    		System.out.print("\n *** Connessione del Client : "
    				+ format(socket) + " ***");
    	}
    	try {
    		BufferedReader fromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    		PrintWriter toClient = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true); //autoflush
    			
    		while (true) {
    			//Ascolto i messaggi del client
    			String userInput = fromClient.readLine();
    			if (!userInput.equals(null)) {
    				
    			//stampo i messaggi del client
    			System.out.print("\nIl Client " + format(socket)+ " ha scritto : " + userInput);
    					
    			//interpreto i messaggi del client
    			int valore = elaboraInput(userInput);
    			switch (valore) {
    			case 0:
    			toClient.println("Comando inserito non valido! Digitare help per la lista dei comandi");
    			break;
    			case 2:
    			toClient.println("Comando ancora non disponibile");
    								break;
    							case 11:
    								toClient.println("Comando 1\n"+
    												 "comando 2\n"+
    												 "comando 3");
    								break;
    							case 12:
    								toClient.println("Disconnessione dal Server...");
    								break;
    						}
    
    				}
    
    				if (userInput.equalsIgnoreCase("quit")){
    				toClient.close();
    				fromClient.close();
    				System.out.print("\n *** Disconnessione del Client : "
    						+ format(socket) + " ***");
    				socket.close();
    				break;
    				}
    			}
    		} catch (IOException e) {
    			System.out.print("\nErrore nella connessione con il Client "
    					+ format(socket) + " : " + e.getMessage());
    		}
    	}
    Client :
    codice:
    private void connetti(String ip, int porta) {
    
    		try {
    
    			Socket clientSocket = new Socket(ip, porta);
    			// clientSocket.setSoTimeout(5000);
    			System.out.println("In connessione con il Server...\n");
    			// Thread.sleep(10000);
    
    			PrintWriter toServer = new PrintWriter(new OutputStreamWriter(
    					clientSocket.getOutputStream()), true); // autoflush
    			BufferedReader fromServer = new BufferedReader(
    					new InputStreamReader(clientSocket.getInputStream()));
    			BufferedReader console = new BufferedReader(new InputStreamReader(
    					System.in));
    
    			System.out.println("Connessione stabilita con il Server "
    					+ format(clientSocket) + "\n");
    
    			while (true) {
    				System.out.print("Client > ");
    				String userInput = console.readLine();
    
    				// se viene premuto invio non fare nulla
    				if (!userInput.equalsIgnoreCase("")) {
    
    					// mando al server
    					toServer.println(userInput);
    
    					// se scrivo quit, mando al server il messaggio di uscita ed
    					// esco dal ciclo
    					if (userInput.equalsIgnoreCase("quit")) {
    						toServer.println(userInput);
    						break;
    					}
    
    					// leggo la stringa del server e la stampo
    					String linea = fromServer.readLine();
    					System.out.println(linea);
    				}
    			}
    
    			console.close();
    			fromServer.close();
    			toServer.close();
    			clientSocket.close();
    			System.out.println("Connessione terminata con il Server "
    					+ format(clientSocket));
    
    		} catch (UnknownHostException e) {
    			System.out.println("Impossibile connettersi al Server " + ip + ":"
    					+ porta + " Host sconosciuto!");
    		} catch (IOException e) {
    			System.out.println("Errore nella connessione con il Server " + ip
    					+ ":" + porta);
    		}
    	}
    Quando il client digita help per la lista dei comandi, il server invia una stringa con l'elenco dei comandi. Per ogni comando c'è /n che torna a capo, quindi è come se fossero 3 Stringhe. Il problema è che il client tramite il BufferedReader con il metodo readLine() mi stampa una stringa alla volta!
    Come faccio a far stampare tutta la lista dei comandi in un colpo solo?

    help me!

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Metti il readLine dentro un while e stabilisci un protocollo di comunicazione: ad esempio il server potrebbe mandare la lista dei comandi una linea per volta e poi spedire la parola chiave END_LIST. Quando il client riceve END_LIST esce dal while.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    50
    Originariamente inviato da simo7784
    Metti il readLine dentro un while e stabilisci un protocollo di comunicazione: ad esempio il server potrebbe mandare la lista dei comandi una linea per volta e poi spedire la parola chiave END_LIST. Quando il client riceve END_LIST esce dal while.
    alla fine ho risolto così:

    codice:
    // leggo la stringa del server e la stampo
    String linea = fromServer.readLine();
    //uso StringTokenizer per spezzare le stringhe
    StringTokenizer tokenziner = new StringTokenizer(linea,":");
    while(tokenziner.hasMoreTokens()) { 
    	System.out.println(tokenziner.nextToken());
    }
    Thanks ciauz

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    50
    però provando con a connettermi con telnet, ricevo i comandi mal formttati.... idee?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Cosa vuol dire che ricevi i comandi mal formattati?
    Da quello che ho potuto capire leggendo i post precedenti, alla fine hai adottato come soluzione, quella di inviare tutti i comandi in una sola linea, separati dai due punti...


    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

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.