Client-Server Problem

Status
Nicht offen für weitere Antworten.

Kizz

Mitglied
Hi,

Arbeite mich grad in Sockets, Streams etc ein wenig ein und wollte deshalb einen Chat programmieren.
Als Grundgerüst habe ich mir die Struktur des Chats aus der FAQ abgeschaut.
Momentan siehts so aus, dass der Server zwar Sachen empfängt und verarbeitet, allerdings das Senden
an den Client funktioniert noch nicht so 100%ig. Komischerweise hats schonmal funktioniert, aber als
ich es kurz drauf gleich nochmal probieren wollte (ohne was am Code verändert zu haben), klappte es
plötzlich nicht mehr oO

Ich versuch mal, das wichtigste zu posten, evtl hat jemand ne Ahnung und kann mir Tips geben:

Zuerst die Funktion, die meinen Client startet:
Evtl könnte auch hier schon ein Fehler sein, ich hab nämlich noch nicht so genau überrissen, was
die while-Schleife macht. Die übertragene Message hol ich mir aus ClientBody, da es mir schon passiert
ist, dass ich die Message schon vorher ausgelesen hab und die Übertragung dann im ClientBody null war.
Code:
        void startClient() throws Exception{
		BufferedReader in;
		BufferedWriter out;
		String msg;
		s=new Socket(ip, port);
		in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		ClientBody cb=new ClientBody(s,this);
		cb.start();
		while(!(cb.getMsg().trim()).equals("exit")){}
		in.close();
		out.close();
	}

Hier die erste Funktion, die etwas an den Server sendet:
Code:
void checkDoubleName(String name){
		try{
			BufferedWriter out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			this.name=name;
			out.write("checkdouble"+name);
			out.newLine();
			out.flush();
			out.close();
		}catch(Exception e){}
	}

Hier der ClientBody: (nur die Funktion run, damits nicht so lang wird)
Code:
    public void run(){
            BufferedReader in;
	    BufferedWriter out;
	   
	    try{
		   in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		   out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		  
	       while ((msg=in.readLine())!= null){
	    	 
	    	   //result of checking double names
	    	   if(msg.length()>=11 && msg.substring(0,11).equals("checkdouble")){
	    		   if(msg.substring(11,msg.length()).equals("true")){
	    			   c.login.setVisible(false);
	    			   c.newUser(c.name);
	    			   UserView uv=new UserView();
	    			   uv.setVisible(true);
	    		   }else{
	    			   c.doubleName();
	    		   }
	    	   }
	       }   
	    }catch (IOException io) {}   
    }

Hier die run-Funktion des ServerBody:
Code:
public void run(){

	    String msg;
	    
	    try{
			BufferedReader in=new BufferedReader(new InputStreamReader(cs.getInputStream()));
	        msg=in.readLine();
			System.out.println(msg);
	        
			BufferedWriter out=new BufferedWriter(new OutputStreamWriter(cs.getOutputStream()));
	      
	        //checking for double user names 
	        if(msg.length()>=11 && msg.substring(0,11).equals("checkdouble")){
	    	    if(server.checkDouble(msg.substring(11,msg.length()))){
	    			System.out.println(msg);
	    	    	out.write("checkdoubletrue");
	    	    	out.newLine();
	    	    	out.flush();
	    	    }else{
	    		    out.write("checkdoublefalse");
	    		    out.newLine();
	    		    out.flush();
	    	    }
	        }
	      
	        //adding new user
	        if(msg.length()>=7 && msg.substring(0,7).equals("newuser")){
	    	    server.addUser(msg.substring(7,msg.length()),this);
	        }
	      	      
	        in.close();
	        out.close();
	    }catch(IOException io){}
    }

Kurz noch zum Ablauf:
Meine Frame-Klasse startet den Client und ruft anschließend eine Funktion auf, die dem Server
einen String bestehend aus dem Wort "checkdouble" und einem Namen sendet.
Der Server überprüft dann zuerst, welchen "Befehl" er erhalten hat und anschließend ob der Name
schon in der Clientliste vorhanden ist. Wenn der Name verfügbar ist, soll "checkdoubletrue" zurückgesendet
werden.
Im Client soll dann bei Eingang eines Strings zuerst wieder überprüft werden, welcher "Befehl" es ist und dann,
sofern es "checkdouble" und "true" ist, das eigentliche Fenster verschwinden lassen, dann ein neues Fenster öffnen
und einen Befehl an den Server schicken, dass der neue User in der Clientliste angelegt wird.

Hauptprobleme sind nun folgende:
-meistens kommt der String vom Server zum Client nicht an und ich hab keine Ahnung wieso. Sprich, es wird mir
vom Server noch ausgegeben, welchen String er erhalten hat und dann passiert einfach garnichts mehr.
-in dem einen Fall, wo es tatsächlich funktioniert hat, verschwand das Login-Fenster, das neue Fenster wurde
angezeigt...aber es wurde kein Befehl an den Server gesendet, dass der neue User angelegt wird (ich lass mir
in der Konsole immer anzeigen, welche Strings beim Server eingehen)

Bin deswegen grad ziemlich ratlos.
Würd mich über Hilfe freuen.

Gruß, Kizz


P.S.: Kurze Frage zu Streams allgemein: Wenn ich meine Programme ausserordentlich beende, werden
dann die Streams trotzdem geschlossen? Oder kann da was im Speicher hängenbleiben, dass mir beim
nächstenmal dazwischenfunken könnte?

P.P.S: Wenn ihr noch mehr Codestücke wollt/braucht, einfach Bescheid sagen.
 

madboy

Top Contributor
Ich muss zugeben dass ich mir nicht alles durchgelesen habe und daher nicht sagen kann "daran hängts" aber was mir aufgefallen ist:
Gaaaanz schlecht wenn was schief läuft:
Code:
}catch(Exception e){}
Ersetze am besten alle catch(...){} durch
Code:
}catch(...){e.printStackTrace();}

Dann bekommst du nämlich im Fehlerfall eine (recht detaillierte) Ausgabe und weißt somit, wo und was nicht klappt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Server-Client IO Problem Netzwerkprogrammierung 6
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
B Client/Server Connection Problem Netzwerkprogrammierung 2
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
J Socket Client - Server Problem Netzwerkprogrammierung 4
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
N Socket Java server c# client problem Netzwerkprogrammierung 7
K Problem Performance Client-Server Netzwerkprogrammierung 5
W Problem mit Server/Client mit ObjectOutputStream Netzwerkprogrammierung 5
S Client-Server Chat Problem nur im lokalen Netztwerk Netzwerkprogrammierung 23
G Problem mit Client-Server Kommunikation Netzwerkprogrammierung 4
S Client/Server Problem Netzwerkprogrammierung 2
A Client Server Problem Netzwerkprogrammierung 37
G Problem bei Objekt senden von server zu client Netzwerkprogrammierung 6
L ganz ganz einfach Client/Server [Problem] Netzwerkprogrammierung 2
R Java Applikation als Client ,Servlet als Server: Problem? Netzwerkprogrammierung 3
V Client Server Problem, empängt oder sendet nichts Netzwerkprogrammierung 4
M HttpUrlConnection + Client/Server Problem Netzwerkprogrammierung 2
S Problem mit der Client Server Netzwerkprogrammierung 6
S Habe ein Problem mit Sockets -> Client Server Netzwerkprogrammierung 2
G Datenautausch Client/Server , hab da ein kleines problem Netzwerkprogrammierung 3
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
K C# Server - Android Client Netzwerkprogrammierung 0
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
E Thematik Client server Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
J Client Server - Serialisierung Netzwerkprogrammierung 8
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
K Client => Server Netzwerkprogrammierung 2
A ? Home-Network, Server/Client-Einrichtung Netzwerkprogrammierung 4
S Socket Server: ConnectionError vom Client erkennen Netzwerkprogrammierung 31
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
N Client-Server-Datenbank Netzwerkprogrammierung 13
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
R Server zu Client Kommunikation Netzwerkprogrammierung 11

Ähnliche Java Themen

Neue Themen


Oben