Reader/ Writer werden nicht geschlossen

flopps

Mitglied
Hallo Leuts,

habe ein kleines Programm geschrieben wo der Client dem Server dauerhaft eine Nachricht schicken soll, aber das macht er irgendwie nur einmal und danach ist schluss. Ich vermute das entweder Reader oder der Writer nicht richtig geschlossen werden bin mir aber nicht sicher. Vielleicht könnt ihr mir ja helfen.
Hier die 2 Klassen zum Server und zum Client:

Java:
public class Server
{
    ServerSocket server;
    BufferedReader reader;
    PrintWriter writer;
    Socket client;
    
    public static void main(String args[])
    {
        Server s = new Server();
    }
    
    public Server()
    {
        try
        {
            server = new ServerSocket(6666);
            System.out.println("Server gestartet");
            
            client = server.accept();
            System.out.println("neuer Client");
        }
        catch (IOException ex){}
        
        declareStreamsWriterReader();
        
        new Thread(new Action()).start();
    }
    
    private void declareStreamsWriterReader()
    {
        try
        {
            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            writer = new PrintWriter(client.getOutputStream());
        }
        catch (IOException ex){}
    }
    
    public class Action implements Runnable
    {
        @Override
        public void run()
        {
            String s;
            
            while(true)
            {
                s = null;
                
                try
                {
                    if((s = reader.readLine()) != null)
                    {
                        System.out.println(s);
                        
                        writer.write(s + "\n");
                        writer.flush();
                    }
                }
                catch (IOException ex){}
                
                writer.close();
                try
                {
                    reader.close();
                }
                catch (IOException ex){}
            }
        }
    }
}

Java:
public class Client
{
    Socket client;
    BufferedReader reader;
    PrintWriter writer;
    
    public static void main(String args[])
    {
        Client c = new Client();
    }
    
    public Client()
    {
        try 
        {
            client = new Socket("localhost", 6666);
            System.out.println("Client gestartet");
        } 
        catch (UnknownHostException ex){} 
        catch (IOException ex) {}
        
       declareStreamsWriterReader();
       
       new Thread(new Action()).start();
    }
    
    private void declareStreamsWriterReader()
    {
        try
        {
            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            writer = new PrintWriter(client.getOutputStream());
        }
        catch (IOException ex){}
    }
    
    public class Action implements Runnable
    {
        @Override
        public void run()
        {
            int count = 0;
            String s;
            
            while(true)
            {
                writer.write("hallo " + count + "\n");
                writer.flush();
                
                count++;
                
                s = null;
                
                try
                {
                    if((s = reader.readLine()) != null)
                    {
                        System.out.println(s);
                    }
                }
                catch (IOException ex){}
                
                writer.close();
                try
                {
                    reader.close();
                }
                catch (IOException ex){}
            }
        }
    }
}
 
Wenn ich das richtig überflogen haben, dann machst Du den reader/writer vor der While Schleife auf und in der While Schleife wieder zu. Wie soll das gehen?

Gruß

Claus
 

Zurück
Oben