Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Scambio di messaggi tra Client e Server (non funziona!)

    Salve a tutti ragazzi. devo creare un Server ed un Clinet utilizzando le Socket in java.

    Allora il client si connette ad un numero di porta su cui è in attesa il server, il numero di porta lo decido io arbitrariamente.

    Quando il client si connette il server gli manda un messaggio di benvenuto e fin quin nessun problema, tutto liscio come l'olio

    Ora però non riesco più ad andare avanti poichè la traccia mi chiede che i due(Client e Server) comunichino

    Mi spiego meglio, Dopo il messaggio di benvenuto il Server tramite un input da tastiera invia una stranga al client e il clien la visualizza

    ES: (dopo essersi connesso il server tramite l'input da tastiera scirve "Ciao come stai" e il client la deve visualizzare.)

    Sembra semplice ma non ci rieco. Vi posto anche il codice del client e del server

    spero mi possiate dare un aiuto....

    CODICE SERVER:

    codice:
    
    import java.io.*;
    import java.net.*;
    
    public class Server extends Thread{
    	PrintStream PrintStr = null;
    	private ServerSocket Server;
    	public static void main(String[] args) throws Exception
    	{
    		new Server();
    	}
    	
    	public Server() throws Exception
    	{
    		Server = new ServerSocket(4331);
    		System.out.println("Il server è in attesa sulla porta 4321");
    		this.start();
    	}
    	public void run(){
    		while(true)
    		{
    			try{
    				System.out.println("In attesa di connessione...");
    				Socket client = Server.accept();
    				System.out.println("Connessione accettata da: " + client.getInetAddress());
    			   // Connect c = new Connect(client);
    			    OutputStream slout = client.getOutputStream();
    			    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(slout));
    			    bw.write("Benvenuto sul server");
    			    bw.write("Ora sei connesso sul server!\n");
    			    
    			    
    				// InvioMessaggioClient() throws IOException{
    					String InputLine = null;
    					System.out.println("\nInvia il messaggio:\n");
    					
    					/*Per prendere un input da tastiera */
    					BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    					InputLine = br.readLine();
    			        
    					PrintStr.println(InputLine);
    					
    					
    				}
    			
    			catch(Exception e){}
    		}
    	}
    }
    
    class Connect extends Thread{
    	private Socket client = null;
    	BufferedReader in = null;
    	PrintStream out = null;
    	public Connect(){}
    	public Connect(Socket clientSocket){
    		client = clientSocket;
    		try
    		{
    			in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    			out = new PrintStream(client.getOutputStream(), true);
    			
    		}
    		catch(Exception e1)
    		{
    			try{ client.close();}
    			catch(Exception e)
    			{
    				System.out.println(e.getMessage());}
    				return;
    			}
    			//this.start();
    		}
    		public void run()
    		{
    			try
    			{
    				out.println("Generico messagio per il clinet");
    				out.flush();
    				//chiude gli stream e le connessioni
    				out.close();
    				in.close();
    				client.close();
    			}
    			catch(Exception e){}
    		}
    	}
    
    </script>

    CODICE CLIENT:

    codice:
    import java.io.*;
    import java.net.*;
    import java.util.*;
    
    public class Client{
    	public static void main(String[] args){
    		BufferedReader in = null;
    		PrintStream out = null;
    		Socket socket = null;
    		String message;
    		try
    		{
    			//apertura di una soket di connessione
    			socket = new Socket("localhost", 4331);
    			
    			//Apre i canali di I/O
    			
    			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    			
    			out = new PrintStream(socket.getOutputStream(),true);
    					//legge dal server
    			
    			message = in.readLine();
    			System.out.println("Messaggio ricevuto dal server: "+ message);
    			
    			
    			
    						
    			out.close();
    			in.close();
    			}
    			catch(Exception e){
    				System.out.println(e.getMessage());
    			}
    		}
    	}

    PS: da premettere una cosa. Qunado compilo prima il server e poi il clinet diciamo che il tutto funziona nel senso che Il server mi chiede di inserire il messaggio da tastiera ma il Client non lo riceve o non lo visualizza

    Aiutatemi per favore

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Ed ecco l'intramontabile tutorial della sun:

    Writing the Server Side of a Socket

    Ovviamente, nulla vieta di leggere anche le sezioni precedenti...

    Chissà.... forse un giorno lo leggerò per bene anch'io...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    che brutta abitudine usare:

    codice:
    catch(Exception e){}
    della serie: se qualcosa va storto non lo saprai mai...
    E poi una volta scritti i byte io farei sempre una flush e una close anche lato server...
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    catch(Exception e){}
    VVoVe: Non me ne ero neppure accorto!!!


    E poi una volta scritti i byte io farei sempre una flush e una close anche lato server...
    Scommetto che anche il tutorial della sun la pensa così!!!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    Salve ragazzi...

    grazie per prima cosa dei consigli, ma in pratica come dovrei modificare il mio codice???

  6. #6
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Per quanto riguarda l'eccezione:

    Codice PHP:
    catch(Exception e)
    {
      
    e.printStackTrace();

    Per il resto seguendo i consigli. (I tutorial sono fatti per essere letti )


    Ciao!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  7. #7
    si lo so che i tutorial sono fatti per essere letti e di fatti lo sto leggendo ma non ha le informazioni che io richiedo poichè io che il client e il server si scambiano i messaggi da soli l'ho fatto io vi ho chiesto come fare a inserirli da input ad esempio dagito dal lato server una stringa una qualsiasi stringa e il clien la visualizza e questo sulla guida fino ad ora non lìho trovato

  8. #8
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Uffa.. assieme ai tutorial, ci sono anche dei file .java di esempio. Se non ho capito male tutto il contesto, quello che ti manca è usare le funzioni:
    - flush()
    - close()
    e queste nel tutorial sono spiegate bene.

    Poi, per inserire le stringhe da tastiera ti basta usare:

    System.in.readLine();

    Il client stampa a video "scrivi una riga di qualcosa" e.. più o meno sarebbe così:

    System.out.println ("...");
    String line = System.in.readLine();

    e poi la stringa la invii col solito metodo.


    P.S.: Non guardare qui!!!

    Correzione:
    System.in no prevede il metodo readLine().
    Si rende quindi necessario costruire un BufferedReader.. Attraverso un InputStreamReader costruito sull'InputStream System.in.
    Siccome è da tanto tempo che non lavoro più con le letture da console... non ricordo se ci sia una scorciatoia...

    Dimenticavo.. per arrivare all'InputStreamReader
    Poi, per ottenere un BufferedReder, la cosa è analoga.

    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

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.