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

    [Java] Client non si accorge quando socket è chiusa

    Ho due programmini, a scopo didattico.
    Il primo lavora come server, il secondo come client.
    Il server fa un semplice "echo" dei messaggi che arrivano dal client, chiudendo però la socket se il messaggio che arriva è "BYE". Il problema è che il client non si accorge quando la socket è stata chiusa dal server e, se l'utente client continua ad inviare messaggi, NON viene lanciata alcuna eccezzione.
    Vorrei chiedervi di aiutarmi a risolvere questo problema.

    SERVER
    codice:
    package echoserver;
    
    import java.io.*;
    import java.net.*;
    
    /**
     * This program implements a simple server that listens to
     * port 8189 and echoes back all client input.
     */
    public class EchoServer {
        public static void main(String[] args ) {
            try {
                // establish server socket
                ServerSocket s = new ServerSocket(8189);
                
                System.out.println("ECHO SERVER RUNNING...");
                
                // wait for client connection
                while(true) {
                    Socket incoming = s.accept();
                    System.out.println("Accepted connection from client");
                    
                    
                    BufferedReader s_in = new BufferedReader
                            (new InputStreamReader(incoming.getInputStream()));
                    PrintWriter s_out = new PrintWriter
                            (incoming.getOutputStream(), true /* autoFlush */);
                    s_out.println( "Hello! Enter BYE to exit." );
                    
                    
                    // echo client input
                    boolean done = false;
                    while (!done) {
                        String line = s_in.readLine();
                        
                        s_out.println("Echo: " + line);
                        
                        if (line.trim().equals("BYE"))
                            done = true;
                    }
                    incoming.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    CLIENT
    codice:
    package echoserver;
    
    import java.net.*;
    import java.io.*;
    
    public class EchoClient {
        
        public EchoClient() {
        }
        
        public static void main(String args[]) {
            
            Socket s = null;
            
            try{
                String SERVER = "localhost";
                int serverPort = 8189;
                // s = new Socket(SERVER, serverPort); BLOCCANTE
                s = new Socket();
                s.connect(new InetSocketAddress(SERVER, serverPort),1000);
                
                
                BufferedReader s_in = new BufferedReader
                        (new InputStreamReader(s.getInputStream()));
                PrintWriter s_out = new PrintWriter(s.getOutputStream(), true /* autoFlush */);
                
                BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
                
                String data = s_in.readLine();
                System.out.println("Received:" + data) ;
                
                while(true) {
                    String input = console.readLine();
                    s_out.println(input);
                    data = s_in.readLine();
                    System.out.println("Received:" + data) ;
                }
                
            }
    
            catch (UnknownHostException e){
                System.out.println("Sock:"+e.getMessage());
            }
            catch (EOFException e){System.out.println("EOF:"+e.getMessage());
            }
            catch (IOException e){
                System.out.println("IO:"+e.getMessage());
            }
             
            
            finally {
                if(s!=null) 
                    try {s.close();}
                    catch (IOException e) {
                System.out.println("close:"+e.getMessage());}}
    
        } 
    }

  2. #2
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    ma fai l'uni a trento?

    probabilmente non gestisci l'eccezione giusta lato clien.
    prova a mettere un:
    codice:
    catch (Exception e){
    
            }
    l'avevo fatto cmq, solo che ho il progetto sull'altro pc.

  3. #3
    Avevo già provato un:
    codice:
    catch (Exception e){
    
            }
    ma niente da fare...

    Sì, stamani eravamo a lezione insieme.
    Il docente non ha saputo rispondermi, quindi ho provato qui.

  4. #4
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da checco2007
    Avevo già provato un:
    codice:
    catch (Exception e){
    
            }
    ma niente da fare...

    Sì, stamani eravamo a lezione insieme.
    Il docente non ha saputo rispondermi, quindi ho provato qui.
    io l'ho fatto l'anno scorso, questo è l'unica roba che ho trovato, magari ti torna utile

    echo server thread
    codice:
    
    import java.io.BufferedReader;
    
    import java.io.IOException;
    
    import java.io.InputStreamReader;
    
    import java.io.PrintWriter;
    
    import java.net.Socket;
    
    
    
    public class EchoServerThread extends Thread  {
    
    	 Socket incoming;
    
    	 BufferedReader in; 
    
    	 PrintWriter out; 
    
    	 
    
    	private void doWork(){
    
    		try{
    
    			boolean done = false;
    
    			while (!done) {
    
    			String line = in.readLine();
    
    			System.out.println(line);
    
    			out.println(line);
    
    				if (line == null) 
    
    					done = true;
    
    				else {
    
    					out.println("Echo: " + line);
    
    					if (line.trim().equals("BYE"))
    
    					   done = true;
    
    				   
    
    			   		}
    
    				}
    
    			}catch(IOException e){e.printStackTrace();}
    
    			finally{
    
    				try{ incoming.close();} 
    
    				catch(IOException e){e.printStackTrace();}
    
    			}
    
    	}
    
    	
    
    	public  void run(){
    
    		doWork();
    
    	}
    
    	
    
    
    
    
    
    	public EchoServerThread() {
    
    
    
    	}
    
    	public EchoServerThread(Socket s) {
    
    		incoming = s;
    
    		try{
    
    			in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));;
    
    			out = new PrintWriter(incoming.getOutputStream(), true);
    
    			out.println("Hello! Type BYE to quit.");
    
    			System.out.println("connesso: "+incoming.getInetAddress().getHostName());
    
    			
    
    		
    
    		}catch(IOException e) { e.printStackTrace(); }
    
    
    
    		// TODO Auto-generated constructor stub
    
    	}
    
    
    
    
    
    
    
    }
    echo server

    codice:
    import java.io.*;
    
    import java.net.*;
    
    
    
    
    
    public class EchoServer {
    
    
    
    	public EchoServer() {
    
    
    
    
    
    		}
    
    
    
    
    
    
    
    	/**
    
    	 * @param args
    
    	 */
    
    	public static void main(String[] args) {
    
    		// TODO Auto-generated method stub
    
    		try{
    
    			ServerSocket s = new ServerSocket(8189);
    
    			while(true){
    
    				Socket csocket = s.accept();
    
    				EchoServerThread est = new EchoServerThread(csocket);
    
    				est.start();
    
    			}
    
    			}catch(IOException e){e.printStackTrace();}
    
    
    
    		}
    
    }

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.