Guten Tag,
ich habe ein Problem mit meinem Code. Ich versuche einen Chat zu erstellen und übergebe dem Server mithilfe von Write eine Naricht die dann der Server in der Konsole mit readline() ausgeben soll. Das komische ist nun, es funktioniert nur im Schnitt jedes 2. mal und ich verstehe nicht wieso
Das ist der MessageListener der auf eine Naricht wartet. Dort wird der Output und Input vom Server erstellt.
Das ist der Ort an dem Die Naricht losgeschickt wird. Die Streams werden in der Methode sendMessage() erzeugt.
Und das ist der Server. Der Thread ConnectionListener macht nichts anderes als die accept() Methode abwickeln.
Ich habe jeweils einen Socket im Client und einem im Server. Ich verstehe nicht warum es mal funktioniert und mal nicht. Laut der Konsole führt er jedes mal alles bis
hierhin aus und dann wartet er auf input. Und ich vermute mal entweder es erreicht ihn gar nicht erst was oder er kann nichts damit anfangen was er bekommt.
Hat jemand vielleicht Rat?
ich habe ein Problem mit meinem Code. Ich versuche einen Chat zu erstellen und übergebe dem Server mithilfe von Write eine Naricht die dann der Server in der Konsole mit readline() ausgeben soll. Das komische ist nun, es funktioniert nur im Schnitt jedes 2. mal und ich verstehe nicht wieso
Java:
public class MessageController extends Thread {
public static BufferedWriter out;
public static BufferedReader in;
public MessageController() throws IOException {
System.out.println("MessageController gestartet");
}
@Override
public void run() {
try {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(Server.client.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(Server.client.getInputStream()));
} catch (IOException e) {
throw new RuntimeException(e);
}
while(true){
System.out.println("Message wird gelesen");
try{
System.out.println("MessageController erhalten: " + in.readLine());
}catch(IOException e){
e.printStackTrace();
System.out.println("fehler");
}
}
}
}
Java:
try {
sendMessage();
System.out.println("Naricht wird gesendet");
System.out.println("ChatPane: " + messageText);
output.write(messageText);
output.newLine();
output.flush();
System.out.println("Naricht wurde gesendet");
} catch (IOException e) {
throw new RuntimeException(e);
}
Das ist der Ort an dem Die Naricht losgeschickt wird. Die Streams werden in der Methode sendMessage() erzeugt.
Code:
public class Server extends Thread
{
public static ServerSocket server;
public static Socket client;
int port;
public Server(int port) throws IOException
{
this.port = port;
server = new ServerSocket(port);
client = new Socket("localhost",port);
System.out.println(port);
// server.setSoTimeout(10000);
}
@Override
public void run() {
try {
ConnectionListener connectionListener;
connectionListener = new ConnectionListener();
connectionListener.start();
MessageController messageController;
messageController = new MessageController();
messageController.start();
} catch (IOException e) {
throw new RuntimeException(e);
}
while (!server.isClosed()) {
if (!client.isConnected()) {
System.out.println("waiting for client");
}
}
}
}
Und das ist der Server. Der Thread ConnectionListener macht nichts anderes als die accept() Methode abwickeln.
Ich habe jeweils einen Socket im Client und einem im Server. Ich verstehe nicht warum es mal funktioniert und mal nicht. Laut der Konsole führt er jedes mal alles bis
Java:
System.out.println("MessageController erhalten: " + in.readLine());
hierhin aus und dann wartet er auf input. Und ich vermute mal entweder es erreicht ihn gar nicht erst was oder er kann nichts damit anfangen was er bekommt.
Hat jemand vielleicht Rat?