# Client nimmt den Inputstream nicht an



## red99 (21. Apr 2007)

Ich habe eine kleine Client Server Applikation geschrieben. Man schickt mit eine Nachricht zum Server der fügt etwas an und schickt sie dann wieder zurück.

```
import java.net.*;
import java.io.*;

public class KleinerServer2 {
   ServerSocket server = new ServerSocket(4444);
   private String str;
   KleinerServer2() throws IOException{
      while(true){
         Socket client = server.accept();
         BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
         BufferedWriter output = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
         while ((str = input.readLine()) != null){
	         System.out.println(str);
	         output.write("Zeile [" + str + "] gsendet.\r\n");
	         output.flush();
         }
         input.close();
         output.close();
      }
   }
   public static void main(String[] argv){
      try {
         KleinerServer2 server = new KleinerServer2();
      }
      catch(IOException e){
         System.out.println(e);
      }
   }
}
```


```
import java.net.*;
import java.util.*;
import java.util.Timer;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class KleinerClient
	extends JFrame implements ActionListener{
	
	private static JTextArea Ein; private JTextField Aus; private JButton Senden;
    private String line; 
    private static Socket server = null;
    private BufferedReader input;
    private BufferedWriter output;
    private Timer timer = new Timer();
    private TimerTask task = null; 
    private int i;
	
   KleinerClient() throws IOException{
	  super ("Client");
	  try {
	      server = new Socket ("localhost",4444);
	      input = new BufferedReader(new InputStreamReader(server.getInputStream()));
	      output = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
	  } catch (IOException ioe) {
	         ioe.printStackTrace();}
	  JPanel Platte = new JPanel();
	  Platte.setLayout(new FlowLayout());
	  Ein = new JTextArea("");
	  Ein.setPreferredSize(new Dimension(380, 300));
	  //Ein.setBackground(Color.white);
	  Ein.setEditable(false);
	  Ein.setBorder(BorderFactory.createBevelBorder(1));
	  Aus = new JTextField("",28);
	  Senden = new JButton ("Senden");
	  Senden.addActionListener(this);
	  Platte.add(Ein);
	  Platte.add(Aus);
	  Platte.add(Senden);
	  setContentPane (Platte);
	  startTimer();
   }
   public static void main (String[] argv){
      try{
         KleinerClient client = new KleinerClient();
         client.setSize(450,380);
    	 client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	 client.setVisible(true); 
    	 Ein.setText("Connected to " + server.getInetAddress() + ":"
               + server.getPort() + "\r\n");
      }
      catch(IOException e){
         System.out.println(e);
      }
   }
   public void actionPerformed(ActionEvent Ereignis) {
		Object Quelle = Ereignis.getSource();
		if (Quelle == Senden)
		{
			try {
				line = Aus.getText();
				if ((line != null) && (!line.equals("exit")))
				{
					output.write(line + '\n');
					output.flush();
					Aus.setText("");
				}
				else
				{
					output.write(line + '\n');
					output.flush();
					Aus.setText("");
					Ein.setText(Ein.getText() + "Verbindung geschlossen.\r\n");
					task.cancel();
		            task = null;
					server.close();
			     //   System.exit(1);
				}
			} catch (IOException ioe) {
				System.err.println("Verbindung zum Client nicht geschlossen!");
	            ioe.printStackTrace();
			}
		}
		
	}
   
   public void startTimer()
	{
		if (task == null)
       {
           task = new TimerTask() {
               public void run()
               {
               	i++;
					System.out.println(i);
						try {
							if((line = input.readLine()) != null)
							{
								Ein.setText(Ein.getText() + line + "\r\n");
							}
							else
							{
								Ein.setText(Ein.getText() + "Kein Rücksignal.");
					            /*server.close();
					            System.exit(1);*/
							}
						} catch (IOException ioe) {
							Ein.setText(Ein.getText() + "Fehler");
							ioe.printStackTrace();
						}
						
               }
           };
           timer.schedule(task, 0, 1);
       }
       else
       {
           task.cancel();
           task = null;
       } 
	}
}
```

Jedoch bleibt es bei  *if((line = input.readLine()) != null) * immer hängen und empfängt den inputstream vom server nicht. 
Bitte helft mir.  :?: 

Schon mal vielen Dank für Eure Hilfe


----------



## SlaterB (21. Apr 2007)

ich habe grade keine längere Testzeit (gut Nacht  ),
deshalb nur ein vielleich unfair erscheinender Tipp:

ein 'kleiner Client' hat weniger als 30 Zeilen..,
mit deinem Monster-Programm baust du dir alle möglichen Fehlerquellen mit ein


----------



## red99 (22. Apr 2007)

ja klar das heißt auch nur deshalb kleiner Client, da ich einen einfachen Client umgeschrieben und nicht extra umbenannt habe^^

und ja klar längere Programme erzeugen mehr Fehler als kleine :-(


----------



## GoWa (22. Apr 2007)

Er macht doch das was er sollte ?
Er schickt die Nachricht zum Server und Empfängt die Nachricht: "Zeile [XYZ] gsendet.

Das Programm bleibt bei

```
if((line = input.readLine()) != null)
```
hängen aus den selben Grund wie der Server bei:

```
Socket client = server.accept();
```


Socket.getInputStream

Serversocket.accept

hängen bleibt.

Stichwort "*blocking mode*"


----------



## red99 (22. Apr 2007)

Also bei mir kommt das Zeile XY gesendet nicht an.


----------



## red99 (22. Apr 2007)

Ah ne geht doch. Komisch gestern gings nicht.


----------

