# Socket



## itouch (24. Okt 2015)

Hallo,
ich komme einfach nicht darauf wieso es nicht geht.
Server:

```
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MultithreadedServer {

    private static int port=9001;

    public static void main(String[] args) throws IOException {
           ServerSocket server = new ServerSocket(port);
          
           while (true) {
               //Warte auf Verbindungen
               final Socket sock = server.accept();
               //Wird eine Verbidnung angenommen, dann bearbeite sie in einem neuen Thread
               new Thread(new AntwortProzess(sock)).start();
           }
       }
    private static void endeMitFehler(String nachricht) {
  
        System.out.println(nachricht);
        System.exit(1);
    }

    /**
     * Erzeuge einen Server
     * @param port Listen-Port
     */  
    private MultithreadedServer(int port) {
        this.port = port;
    }


    private static class AntwortProzess extends Thread {

        private final Socket socket;

        public AntwortProzess(Socket socket) {
            this.socket = socket;
        }

        @Override
        public void run() {
         
            try (Socket socket = this.socket) {
             
                System.out.print("true");
           
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                out.write("nachteich");
                 while (true){
                    String line = reader.readLine();
                    if (line!=null){
                        System.out.print(line);
                    }
                }
            } catch (IOException ex) {
            }
        }
    }
}
```



Client:

```
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;


public class Client extends Thread {

    public static void main(String[] args) throws IOException {
        Client j = new Client();
        j.start();
    }

    /**
     * Erzeuge einen Client
     * @param hostname Name des entfernten Rechners
     * @param port Port für die Verbindung
     * @param id id des Client-Threads
     */
 

    @Override
    public void run() {
        //Diese Methode wird ausgeführt, wenn ein Client-Thread startet
      
        //Baue eine Verbindung zum entfernten Rechner auf
        try (Socket verbindung = new Socket("localhost", 9001)) {
            //Öffne einen InputStream
            BufferedReader reader = new BufferedReader(new InputStreamReader(verbindung.getInputStream()));
            //Lies eine Textzeile vom Servedr
          
            //Berechne die benötigte Zeit
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(verbindung.getOutputStream()));
            out.write(reader.readLine());
        out.flush();
        out.write("Verbindung");
        out.flush();
        } catch (IOException ex) {
            System.out.println(  ": " + ex.getMessage());
        }
    }

}
```

Das Problem ist, dass dieser Code

```
while (true){
                    String line = reader.readLine();
                    if (line!=null){
                        System.out.print(line);
                    }
                }
```

nicht ausgeführt wird?!
Wie bekommt man die while schleife zum laufen?
vielen dank


----------



## Ch4t4r (25. Okt 2015)

Der Teil wird ausgeführt, jedoch liest readLine() nur ganze Zeilen ein. Nachdem du etwas beim Client gesendet hast, musst du anweisen, dass nun eine Neue Zeile folgt (out.write("Verbindung*\n*"); \n steht für diese neue Zeile.)


----------

