Ich arbeite gerade an einer Art Chat-Programm dass auf dem Client-Server-Modell basiert.
Die Clients melden sich an, Passwort und Name werden überprüft und dann können die Clients Nachrichten an alle Clients senden oder eine Nachricht empfangen.
Wenn sich ein Client anmeldet, sendet er dem Server seine Userdateien, danach startet er einen Thread um Nachrichten zu empfangen, und geht dann in eine Schleife, in der er die Möglichkeit hat, Nachrichtern zu schreiben und abzuschicken. Wenn jetzt der Server z.B. eine nachricht schickt, dass der Client angemeldet ist, passiert nichts.
Beim Client kommt nichts an.
An der Serverseite kann's nicht liegen, dort hab ich alles gecheckt und der Output wird gesendet.
Hier erstmal der Code:
Der Client:
und noch der Empfangsthread:
Was noch zu erwähnen wäre:
Den Empfangsthread wie er da so steht, hab ich zum Testen in einem vereinfachten Client-ServerProgramm verwendet, dort hat der Client auch etwas empfangen! (aber glaube ich irgendwo anders dann blockiert)
Außerdem verwende ich nur ObjectStreams über die ich einerseits User Objekte(enthalten Userdaten) und Message Objekte(enthalten Nachricht und den absender User)
Habe ich also irgendwas irgendwo falsch gemacht? Oder könnte sich der Fehlerteufel an einer ganz anderne Stelle eingeschlichen haben, was immer wieder Probleme beim Senden/Empfangen verursacht?
Wodurch kommen solche Probleme immer wieder zustande?
Wäre echt lieb, wenn mir jemand weiterhelfen könnte (sogar mein Übungsleiter, ein Dipl.Inf. hat sich an meinem Problem die Zähne ausgebissen )
Danke an alle, die sich wenigstens die Mühe machen, mein Problem mal anzuschauen!
MfG,
lacyuu
(Diese Frage mit Quelltext hatte ich schon in nem anderen Forum gepostet, wo aber nicht so viel los ist)
Die Clients melden sich an, Passwort und Name werden überprüft und dann können die Clients Nachrichten an alle Clients senden oder eine Nachricht empfangen.
Wenn sich ein Client anmeldet, sendet er dem Server seine Userdateien, danach startet er einen Thread um Nachrichten zu empfangen, und geht dann in eine Schleife, in der er die Möglichkeit hat, Nachrichtern zu schreiben und abzuschicken. Wenn jetzt der Server z.B. eine nachricht schickt, dass der Client angemeldet ist, passiert nichts.
Beim Client kommt nichts an.
An der Serverseite kann's nicht liegen, dort hab ich alles gecheckt und der Output wird gesendet.
Hier erstmal der Code:
Der Client:
Java:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args)throws IOException{
anmeldung();
}
public static void anmeldung() throws IOException{
String Name;
String Passwort;
try{
Socket csocket = new Socket("localhost",12345); //Verbinden mit dem Server über Socket
ObjectOutputStream send = new ObjectOutputStream (csocket.getOutputStream());
BufferedReader in = new BufferedReader ( new InputStreamReader(System.in));
System.out.print("Bitte Namen eingeben: "); //Dateneingabe
Name = in.readLine();
System.out.print("Bitte Passwort eingeben: ");
Passwort = in.readLine();
User clientuser = new User(Name,Passwort); //Anlegen einer UserKlasse
Message msg = new Message("",clientuser); //Anlegen einer default-Message
send.writeObject(clientuser); //User-Objekt wird verschickt
send.flush();
System.out.println("So, Paket ist raus!!");
ThreadEmpfang empfang = new ThreadEmpfang(csocket); //Starten der Threads die gleichzeitiges Senden und Empfangen von Nachrichten ermöglichen
empfang.start();
try{
while(true){
System.out.print("Nachricht eingeben: ");
message.nachrichtschreiben(in.readLine());
send.writeObject(message);
send.flush();
}
}catch(IOException e){System.err.print(e);}
}catch(IOException e){System.err.println(e);}
}
}
und noch der Empfangsthread:
Java:
import java.net.*;
import java.io.*;
import java.util.*;
public class ThreadEmpfang extends Thread{
Socket socket;
Message nachricht;
ThreadEmpfang(Socket socket){
this.socket = socket;
}
@Override
public void run(){
try{
while(true){
nachricht = new Message("");
ObjectInputStream input= new ObjectInputStream(socket.getInputStream());
nachricht = (Message)input.readObject();
Darstellung(nachricht);
}
}catch(IOException e){}
catch(ClassNotFoundException f){System.out.println("Falscher Datentyp.");}
}
public void Darstellung(Message message){
if(message.absender==null){
System.out.println("default: "+message.msg);
}
else{System.out.println(message.absender.name+" : "+message.msg);}
}
}
Was noch zu erwähnen wäre:
Den Empfangsthread wie er da so steht, hab ich zum Testen in einem vereinfachten Client-ServerProgramm verwendet, dort hat der Client auch etwas empfangen! (aber glaube ich irgendwo anders dann blockiert)
Außerdem verwende ich nur ObjectStreams über die ich einerseits User Objekte(enthalten Userdaten) und Message Objekte(enthalten Nachricht und den absender User)
Habe ich also irgendwas irgendwo falsch gemacht? Oder könnte sich der Fehlerteufel an einer ganz anderne Stelle eingeschlichen haben, was immer wieder Probleme beim Senden/Empfangen verursacht?
Wodurch kommen solche Probleme immer wieder zustande?
Wäre echt lieb, wenn mir jemand weiterhelfen könnte (sogar mein Übungsleiter, ein Dipl.Inf. hat sich an meinem Problem die Zähne ausgebissen )
Danke an alle, die sich wenigstens die Mühe machen, mein Problem mal anzuschauen!
MfG,
lacyuu
(Diese Frage mit Quelltext hatte ich schon in nem anderen Forum gepostet, wo aber nicht so viel los ist)
Zuletzt bearbeitet: