Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 13 su 13

Discussione: Problema Socket Server

Hybrid View

  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Sei sicuro che il codice del server è esattamente quello che hai postato? C'è anche la stampa del message dell'eccezione?
    E, cosa più importante, sei sicuro di aver ricompilato quel codice e di star eseguendo esattamente quel codice?


    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

  2. #2
    codice:
    import java.io.*;
    import java.net.*;
    import java.util.*;
    
    
    
    
    public class TCPServer extends Thread {
        
        private int port;
        private ServerSocket server; 
        
        public TCPServer(int port)throws IOException{
            this.port=port;
            this.server = new ServerSocket(port);
        }
        
        @Override
        public void run(){        
            try{
                while(!Thread.interrupted()){
                    Socket conn = server.accept();
                    System.out.println("Connesso: "+ conn.getInetAddress().toString());
                    Connection c = new Connection(conn);
                    c.start();
                }
            }catch(IOException ex){
    			ex.printStackTrace();
            }
        }
        
        public class Connection extends Thread{
            
            private Socket conn;
            private BufferedReader in;
            private BufferedWriter out;
            
            public Connection(Socket conn)throws IOException{
                this.conn = conn;
                this.in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                this.out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
            }
            
                
            @Override
            public void run(){
                try{
                    System.out.println("Attesa...");
                    Thread.sleep(10000);
                    this.out.write("check");
                    
                    System.out.println("Inviato");
                }catch(IOException ex){
                    ex.printStackTrace();
                }catch(InterruptedException ex){
    				ex.printStackTrace();
                }
            }
        }
        
        public static void main(String[] args){
                try{
                    //TCPServer s = new TCPServer(Integer.parseInt(args[0]));
                    TCPServer s = new TCPServer(9000);
                    s.start();
                    int c = System.in.read();
                    s.interrupt();
                    s.join();
                }catch(IOException ex){
    				ex.printStackTrace();
                }catch(InterruptedException ex){
    				ex.printStackTrace();
                }
        }
    }
    Ho aggiunto tutte le stampe delle eccezioni, ma niente non so davvero cosa sbaglio

  3. #3
    Effettivamente ho fatto anche io una prova su due macchine quasi diverse (macchina fisica e una macchina virtuale) e l'eccezione non viene sollevata (Misteri della vita....).
    Un workaround, non so esattamente se fa al caso tuo, potrebbe essere quello di fare in modo che dopo ogni messaggio inviato (Server) si aspetti un risposta (acknowledgement) che ne so per esempio la stringa OK in questo modo puoi sapere che il client è ancora connesso oppure se in risposta trovi altro (se cade la connessione viene letto NULL) sai che si è verificato un errore

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