G
Guest
Gast
Hmm.. ich bin mir nicht sicher ob mein Problem ueberhaupt irgendetwas mit dem Server/Client zu tun hat oder ob ich es einfach nur nicht auf die Reihe bekomme IO anzuwenden. Ich poste einfach mal den ganzen Quellcode der Fehlerklasse:
Also das Verbinden funktioniert ohne Probleme. Folgendes Problem besteht:
Eine andere Klasse ruft die Methode send() hier auf, in die ein zu sendender String uebergeben wird. Das senden in Zeile 60-64 scheint auch zu funktionieren. Beim Empfaenger blockt aber scheinbar das readLine() in Zeile 67 einfach den Programmablauf. Bei in.ready() kommt noch true raus, aber bei readLine() passiert aufeinmal nichts mehr.
Ich habe keine Ahnung woran das jetzt liegen koennte, bin auch ziemlich neu in Java bzw. Programmierung ueberhaupt.
Wenn ready() true ausgibt, dann heißt das doch, dass im Stream was angekommen ist und auch bereit ist ausgelesen zu werden, oder? Warum geht dann readLine() nicht? Bitte um Hilfe!
Code:
import java.net.*;
import java.io.*;
import javax.swing.SwingUtilities;
public class GoNet extends Thread {
private Go game;
private ServerSocket server;
private Socket client;
private PrintWriter out;
private BufferedReader in;
private boolean isHost;
public String hostip, sendThis="";
public int port, status = 0;
public static final int DISCONNECTED = 0, CONNECTING = 1, CONNECTED = 2;
public GoNet(boolean isHost, String hostip, int port, Go game) {
this.isHost = isHost;
this.hostip = hostip;
this.port = port;
this.game = game;
status = CONNECTING;
start();
}
public void send(String sendThis) {
this.sendThis = sendThis;
}
public void run() {
runnetwork:
while(true) {
try{
Thread.sleep(1000);
} catch (InterruptedException e) {
new MessageWindow("Error", "Die Verbindung wurde unterbrochen.");
break runnetwork;
}
switch(status) {
case CONNECTING:
try {
if(isHost) {
server = new ServerSocket(port);
client = server.accept();
} else {
client = new Socket(hostip, port);
}
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream());
status=CONNECTED;
new MessageWindow("Verbindung", "Verbingung erfolgreich hergestellt.");
} catch (IOException e) {
new MessageWindow("Error", "Verbingung fehlgeschlagen.");
break runnetwork;
}
break;
case CONNECTED:
if(sendThis.length()>0) {
out.write(sendThis);
out.flush();
sendThis = "";
}
try{
if(in.ready()) {
String callMethod = in.readLine();
game.clientAction(callMethod);
}
} catch (IOException e) {
new MessageWindow("Error", "Die Verbindung wurde unterbrochen.");
break runnetwork;
}
break;
case DISCONNECTED:
new MessageWindow("Verbindung", "Verbindung beendet.");
break runnetwork;
}
}
status=DISCONNECTED;
try {
if(isHost){
server.close();
}
client.close();
in.close();
out.close();
} catch (IOException e) {}
}
}
Also das Verbinden funktioniert ohne Probleme. Folgendes Problem besteht:
Eine andere Klasse ruft die Methode send() hier auf, in die ein zu sendender String uebergeben wird. Das senden in Zeile 60-64 scheint auch zu funktionieren. Beim Empfaenger blockt aber scheinbar das readLine() in Zeile 67 einfach den Programmablauf. Bei in.ready() kommt noch true raus, aber bei readLine() passiert aufeinmal nichts mehr.
Ich habe keine Ahnung woran das jetzt liegen koennte, bin auch ziemlich neu in Java bzw. Programmierung ueberhaupt.
Wenn ready() true ausgibt, dann heißt das doch, dass im Stream was angekommen ist und auch bereit ist ausgelesen zu werden, oder? Warum geht dann readLine() nicht? Bitte um Hilfe!