Hallo,
hoffe ich bin hier im richtigen unterforum.
ich habe zur übung ein kleines client-server programm geschrieben mit dem ich eigendlich ganz zufrieden bin.
also es passiert nichts weiter als das der client einen string an den server schickt, dieser verändert wird und an den client zurück geschickt wird.
jetzt hab ich mir zur aufgabe gemacht das ganze mit hilfe von threads zum laufen zu bringen. dazu möchte ich erst die server-verbindung (da diese blockiert) und den server-reader in eigenen threads laufen lassen.
die client seite verläuft ja dann im großen und ganzen analog.
jetzt habe ich das problem das mein reader nicht initialisiert wird und ich eine NullPointerException bekomme. ich kann mir aber nicht erklären warum. vielleicht überseh ich einfach was. daher ist auch noch kein writer implementiert.
hier meine klassen:
GoServer: Stellt die Verbindung her
ReadServer: soll den String vom client lesen
Ich hab versucht den Reader an verschiedenen stellen in dieser klasse zu initialisiern aber es schlägt jedesmal fehl. ich vermute mal das die verbindung noch nicht steht wenn "GoServer.s.getInputStream()" ausgeführt wird. hab das mit diversen sleep()s versucht zu umgehn aba bisher ohne erfolg.
Die main:
wahrscheinlich liegt irgendein simpler fehler vor den ich mir nicht erklären kann. aber vielleicht könnt ihr mir einen tip geben.
Wäre super.
hoffe ich bin hier im richtigen unterforum.
ich habe zur übung ein kleines client-server programm geschrieben mit dem ich eigendlich ganz zufrieden bin.
also es passiert nichts weiter als das der client einen string an den server schickt, dieser verändert wird und an den client zurück geschickt wird.
jetzt hab ich mir zur aufgabe gemacht das ganze mit hilfe von threads zum laufen zu bringen. dazu möchte ich erst die server-verbindung (da diese blockiert) und den server-reader in eigenen threads laufen lassen.
die client seite verläuft ja dann im großen und ganzen analog.
jetzt habe ich das problem das mein reader nicht initialisiert wird und ich eine NullPointerException bekomme. ich kann mir aber nicht erklären warum. vielleicht überseh ich einfach was. daher ist auch noch kein writer implementiert.
hier meine klassen:
GoServer: Stellt die Verbindung her
Java:
package server2;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class GoServer implements Runnable {
static ServerSocket ss = null;
static Socket s = null;
private Thread thread;
public GoServer() {
thread = new Thread(this, "GoServer");
}
public void start() {
thread.start();
}
public void join() throws InterruptedException {
thread.join();
}
public void run() {
try {
ss = new ServerSocket(9999);
} catch (IOException e) {
e.printStackTrace();
}
while(true){
try {
System.out.println("Waitin for client...");
s = ss.accept();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(GoServer.s != null){
try {
Thread.sleep(500);
s.close();
System.out.println("Client disconnected.");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
}
}
ReadServer: soll den String vom client lesen
Java:
package server2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ReadServer implements Runnable {
static String get;
private Thread thread;
public ReadServer() {
thread = new Thread (this, "Reader");
}
public void start() {
thread.start();
}
public void join() throws InterruptedException {
thread.join();
}
public void run(){
try {
BufferedReader in;
in = new BufferedReader(new InputStreamReader(GoServer.s.getInputStream()));
get = in.readLine(); // nicht schön aber läuft
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("From Client: " + get);
}
}
Ich hab versucht den Reader an verschiedenen stellen in dieser klasse zu initialisiern aber es schlägt jedesmal fehl. ich vermute mal das die verbindung noch nicht steht wenn "GoServer.s.getInputStream()" ausgeführt wird. hab das mit diversen sleep()s versucht zu umgehn aba bisher ohne erfolg.
Die main:
Java:
package server2;
public class Control {
public static void main(String[] args) {
GoServer go = new GoServer();
go.start();
ReadServer read = new ReadServer();
read.start();
try {
go.join();
read.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
wahrscheinlich liegt irgendein simpler fehler vor den ich mir nicht erklären kann. aber vielleicht könnt ihr mir einen tip geben.
Wäre super.