ClientSocket



  • Also ich habe folgendes Problem:

    Ich baue gerade an einem DebugServer, der Logger und einige zusaetzliche Funktionen bieten soll.
    Das Problem ist, der Server arbeitet solange gut, wie man den Client nicht abschiesst. Das heist, wenn der Client einfach gekillt wird (momentan Telnet), ohne die Connection sauber zu schliessen, haengt sich der ServerThread auf. Meiner Meinung nach, sollte aber eine IOException geworfen werden, was leider nicht getan wird.

    /**
    	 * CTor
    	 * @param port Port, the server should listen on
    	 */
    	public Server(int port) {
    	    parser = new Parser(DebugServer.textArea);
    	    parser.add("free", DebugServer.textFreeRam);
    	    parser.add("total", DebugServer.textTotalRam);
    
    		this.port = port;
    		createServerSocket();
    		thread = new Thread(this);
    		thread.start();
    	}
    
    	/**
    	 * inherited from Runnable
    	 */
    	public void run() {
    		createClientSocket();
    		while(true) {
    			String in;
    			try {
    				while((in = reader.readLine()) != null) {
    				    parser.parse(in);
    				}
    			}catch(IOException e){
    				try {
    					clientSocket.close();
    				}catch(IOException ex) {
    					System.out.println(ex.toString());
    				}
    				System.out.println(e.toString());
    				createClientSocket();				
    			}
    		}
    	}
    

    Ist an meinem Code etwas falsch? Oder gibts eine Moeglichkeit, abgeschossene Client's herauszufinden? isClosed() hilft leider nichts, eine Exception wird auch nicht geworfen.

    Thanks in advance,
    Sven



  • So einfach waehrs gewesen:

    public void run() {
    		createClientSocket();
    		while(DebugServer.isRunning()) {
    			String in;
    			try {
    			    in = reader.readLine();
    			    if(in == null) {
    			        clientSocket.close();
    			        clientSocket = null;
    			        createClientSocket();
    			    } else {
    			        parser.parse(in);
    			    }
    			}catch(IOException e){
    				System.err.println(e.toString());	
    			}
    		}
    		try {
    		    clientSocket.close();
    		} catch(Exception e) {
    		    System.err.println(e.toString());
    		}
    		try {
    		    serverSocket.close();
    		} catch(Exception e) {
    		    System.err.println(e.toString());
    		}
    	}
    

Anmelden zum Antworten