Hi Leute,
ich habe gerade mit Java angefangen und eigne mir sehr viel durch "learning by doing" an.
Im Moment soll es ein Chatserver werden. Ich bin kein Programmieranfänger, in PHP bin ich sozusagen Profi und früher hab ich mal ne Zeit lang VisualBasic.NET gemacht. Sollte also nicht so schwer werden.
Aus vielen Tutorials und Videos hab ich mir schon folgendes zusammengebastelt:
StillePost.java:
package stillePost;
import java.util.Scanner;
public class StillePost {
public static Server server = null;
public static Client client = null;
public static void main(String[] args) {
try {
System.out.println("Press [ENTER] to start client");
Scanner keyboard = new Scanner(System.in);
String input;
input = keyboard.next();
keyboard.close();
if(input.equals("server")) {
//if(args[0].equals("server")) {
System.out.println("starting server");
server = new Server();
server.start();
} else {
System.out.println("starting client");
client = new Client();
client.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Client:
package stillePost;
import java.io.PrintWriter;
//import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class Client extends Thread {
private final static int PORT = 4444;
private final static String HOST = "localhost";
public void start() {
try {
Socket socket = new Socket(HOST, PORT);
System.out.println("You'r now connected to " + HOST + ":" + PORT);
try {
Scanner keyboard = new Scanner(System.in);
Scanner in = new Scanner(socket.getInputStream());
PrintWriter out = new PrintWriter(socket.getOutputStream());
while(true) {
// ===== Fehler =====
String input = keyboard.nextLine();
out.println(input);
out.flush();
while(in.hasNext())
System.out.println(in.nextLine());
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
System.out.println("Der Server scheint offline zu sein.");
System.out.println("Versuche es dann noch einmal.");
e.printStackTrace();
}
}
}
Das Ganze soll also Server und Client in einem werden, nur, dass der Server etwas versteckt ist.
1. Der Client kann super zum Server connecten aber es scheitert beim Clienten an der Zeile, die ich markiert habe:
java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at stillePost.Client.start(Client.java:26)
at stillePost.StillePost.main(StillePost.java:26)
2. Wenn ich bei der allerersten Eingabeaufforderung (also ob der Server starten soll) einfah ENTER drücke, dann passiert nichts, erst wenn ich mindestens ein Zeichen eingebe. Weiß jemand wie man das ändern kann?Vielen Dank für Eure Mühe.
Später wird das Ganze um GUI und serverseitige Befehlsverarbeitung erweitert.