Socket

itouch

Neues Mitglied
Hallo,
ich komme einfach nicht darauf wieso es nicht geht.
Server:
Java:
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:
Java:
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
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
 
Zuletzt bearbeitet von einem Moderator:
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.)
 

Zurück
Oben