Socket Inputstream listener

alaniarisss

Grünschnabel
Hallo Leute,

ich hoffe ihr könnt mir weiter helfen. Ich bin gerade dabei einen kleinen Messenger zu programmieren (Amateur) und es klappt ja auch ganz gut bis jetzt. Ich habe einen Server und einen Client durch die gleichen Port und der IP-Adress können sich die beiden auch Unterhalten. Das ganze Funktioniert alles über einer Texteingabe (jTextArea).

Mein Problem ist aber wenn jetzt z.B der Client eine Nachricht schickt muss der Server erst auf den "Update-Button" drücken um die nachricht zu sehen. Unter dem "Update-Button" versteckt sich diese Funktion :

Code:
try {
            InputStream sin = MyClient.getInputStream();
            DataInputStream in = new DataInputStream(sin);
            line = in.readUTF(); 
            jTextArea1.setText(String.valueOf(line));
            } 
        catch (IOException g)
            {
            System.out.println(g);
            } 
}

Da ein Messenger mit "Update-Button" kein richtiger Messenger ist brauch ich etwas
das diese Funktion ausführt wenn im InputStream etwas neues passiert und es dann wie auch der Funktion oben im (jTextArea1) rein schreibt.

Ich dachte erste nach einem Listener aber hab gelesen das man erst die Enter-Taste drücken muss damit etwas passiert.

Kann mir da jemand weiter helfen, vielleicht welchen Listener ich wirklich brauche. Für ein kleines Beispiel wäre ich sehr dankbar.

Grüße euch, Leventis:)
 
Hallo!

ich bin selber dabei einen chat zu schreiben... geht aber eher in die richtung von icq/msn für mehrere Leute...

Versuch es mal so:
Java:
while(true){
	txtArea.append(client.catchMsg());
	txtArea.append("\n");
}

client.catchMsg() besteht nur aus der readLine (oder Ähnliches) Methode und gibt diesen String zurück :)
Du kannst natürlich noch zusätzliche Sicherheitsprüfungen einbauen, das ist klar!

Viel Glück!
Gruß
Felix
 
Danke für deine schnelle Antwort aber ichw weiß jetzt ehrlich gesagt nicht was ich an deinem code umändern soll damit es funktioniert...:-)

Ich hab meine Funktion mal in einer endlosschleife eingebunden damit er meine funktion immer mach aber dann hängt mein PC was auch normal ist......
 
Hallo!

Ich empfehle dir, dass du deine Serverklasse sowie Clientklasse in je einem Thread laufen lässt, dadurch 'hängt' es nicht mehr und du kannst regulär weiterklicken in deiner GUI!

Was ich meine:
Du hast eine Klasse mit deiner GUI und deinen Elementen (TextArea, Buttons etc.) und eine Klasse in der du sozusagen die Grundmethoden des Clients/Servers hast (senden, empfangen, verbinden...)

Ich habe es nun so gelöst: In meinem Menü habe ich einen Verbinden Button, der eine Action ausführt (in einem Thread) ...
Diese sieht gekürzt so aus:
Java:
public void actionPerformed(ActionEvent arg0){
	new Thread(new Runnable(){
		public void run(){                                                                            
			try { client.connect("127.0.0.1", 2119, user); }
			catch(Exception e){ e.printStackTrace(); }
			running = true;
                                          
			while(running) {
				String line = "";
              								
				try { line = client.receive(); } 
				catch (Exception e) { e.printStackTrace(); }								
				MyChat.append(line);
				MyChat.append("\n");
			}	
		}
	}).start();
}

Die Methode Receive in meinem Client schaut dann so aus:
Java:
public String receive() throws IOException {
	String line = "";				
	line = in.readLine();
		
	return line;
}

Vielleicht verstehst du nun eher, was ich meine :)
Viel Spaß & Gruß
Felix

EDIT: Schau nicht zu genau auf den Code, der ist gerade von mir frei geschrieben worden, es ist also gut möglich, dass sich Fehler eingeschlichen haben :)
 
Zuletzt bearbeitet:
Zurück