Thread gibt Nachrichten mehrmals aus (Messenger in Java)

Status
Nicht offen für weitere Antworten.
A

Alex

Gast
Hi Leute,

ich arbeite zur Zeit an einem Messenger und mein Problem ist, dass der Thread der beim Server für
die Annahme der Nachrichten des Clients zuständig ist die Nachrichten bei der ersten Nachricht 1x,
bei der zweiten Nachricht 2x, bei der dritten Nachricht 3x und so weiter ausgibt.

Nun aber erstmal ein paar Worte zum Aufbau des Programms. Der Messenger nur für die Kommunikation im LAN gedacht. Der Client schickt seine Nachrichten als Vector. In einem Vector steht immer Nachricht, Sender, Empfänger.
Der Server hat einen Thread der mittels einer endlosschleife überprüft ob ein Vector bei ihm angekommen ist.
Sobald eine Nachricht beim Server ankommt schreibt der Thread den Nachrichtentext in das Nachrichtenlogfenster
des Servers.
Wie schon oben beschrieben wird bei der ersten Nachricht die der Client sendet die Nachricht 1x ausgegeben, beim zweiten mal 2x und so weiter.

Ein Beispiel:

1. Nachricht
Nachricht: Hallo
Ausgabe auf dem Server: Hallo

2. Nachricht
Nachricht: Wie gehts dir
Ausgabe auf dem Server: Wie gehts dir
Wie gehts dir

3. Nachricht
Nachricht: Schönes Wetter heute
Ausgabe auf dem Server: Schönes Wetter heute
Schönes Wetter heute
Schönes Wetter heute

Wie ihr seht wird mit jedem mal der Thread einmal mehr ausgeführt. Ich habe zuerst gedacht das könnte daran liegen, dass das vielleicht daran liegt, dass im InputStream noch Fragmente der alten Nachricht vorhanden sind aber dann würde die zweite Nachricht ja lauten: Hallo, Wie gehts dir.

So, jetzt habe ich genug geredet. Ich hoffe jemand von euch hat sich mit diesem oder einem ähnlichen Problem schonmal rumgeschlagen und kann mir helfen.

Vielen Dank im voraus

Alex
 
A

Alex

Gast
Hi sigma,

hier ist der Source von dem Server Thread:

Code:
import java.io.*;
import java.io.Serializable;
import java.net.*;
import java.util.Vector;

public class ClientThread extends Thread implements Serializable{
    
     String message = null;
     String user_from = null;
     String user_to = null;
     Vector messageVektor = new Vector();
     
     private ClientSocket m_clientSocket = null;
     private Server m_server = null;
     private Socket m_socket = null;
     private BufferedReader m_in  = null;
     private PrintWriter m_out = null;
			
     public ClientThread(ClientSocket clientSocket, Server server) {
          m_clientSocket = clientSocket;
          m_server = server;
          m_socket = clientSocket.getSocket();
				
          if(m_socket != null) {
               try {
	     m_in  = new BufferedReader(new InputStreamReader(m_socket.getInputStream()));
	     m_out = new PrintWriter(new OutputStreamWriter(m_socket.getOutputStream()));
               }
               catch(IOException e) {}
	
          }
     }

     public void run() {
          if(m_socket != null && m_in != null && m_out != null) {
               
               m_server.log(m_server.getTime() + "   " + m_clientSocket.getNickname() + " enters client thread");
               String strBuffer=null;
               Vector messageVektor=null;
               InputStream i_stream;
               ObjectInputStream ios;
										
	for(;;)  {
	     try {										          i_stream = m_socket.getInputStream();
	          ios = new ObjectInputStream(i_stream);
	          messageVektor = (Vector)ios.readObject();
                     }		
	     catch(Exception e) {
	          System.out.println("Fehler beim lesen des Objekts");
	     }
				
	     if(messageVektor!=null) {
	          m_server.logmsg(m_server.getTime() + "   " + messageVektor.get(2) + " sagt zu " +
                                                    messageVektor.get(3) + ": " + messageVektor.get(1));
   	          messageVektor=null;
	     }
	     else {
	          System.out.println("IOException by Client");
	          break;
	     }					
               }
          }							
     }
}
 
A

Alex

Gast
Mir ist da gerade noch etwas zu dem Problem aufgefallen was vielleicht zur Lösung des Problems beitragen könnte.

Und zwar kommt der Nachrichtentext der in dem Vector gesendet wird aus einer TextArea. Wenn ich jetzt
nach der Funktion NachrichtSenden(nachrichtentext, sender, empfänger) die TextArea mit .setText(String); auf einen
anderen Wert setze dann wird genau dieser Wert bei den Wiederholungen angezeigt.

Code:
public void keyReleased(KeyEvent ke1) {
     if( ke1.getKeyCode() == KeyEvent.VK_F9 ) { 
          sendMessage(ta_messagetext.getText(), t_nick.getText(), ta_useronline.getSelectedItem()); 	
          f_main2.hide();  //Das Nachrichteneingabefenster schliessen
     }		   	
}

Der Vollständigkeit halber schreibe ich hier noch mal den Source von sendMessage hinterher


Code:
public void sendMessage(java.lang.String message, java.lang.String user_from, java.lang.String user_to) {
     if(m_socket != null) {
          messageVektor.removeAllElements();
          messageVektor.add(0, "[/START_Message]");
          messageVektor.add(1, message);
          messageVektor.add(2, user_from);
          messageVektor.add(3, user_to);
										
          try {				
               OutputStream os = m_socket.getOutputStream();
               oos = new ObjectOutputStream(os);				
               oos.writeObject(messageVektor);
               oos.flush();
          }
          catch(Exception ioex) {
               sendLog("User: " + t_nick.getText() + " Nachricht in Vektor schreiben fehlgeschlagen");
          }							
     }		
}

Gruß

Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Thread und Ratelimiter Netzwerkprogrammierung 4
F Thread "extern" beenden Netzwerkprogrammierung 3
OnDemand Linux RAM per Thread Netzwerkprogrammierung 3
V Socket Audio Clip loopen ohne neuen Thread Netzwerkprogrammierung 2
C Thread Netzwerkprogrammierung 9
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
S Socket ThreadPool oder Thread pro Client? Netzwerkprogrammierung 11
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
P Wie spreche ich einen Thread an? Netzwerkprogrammierung 20
M Thread Scheduler Java 5.0? Netzwerkprogrammierung 2
7 Mehrere Verbindungen gleichzeitig in einem Thread mit ApacheHTTP Netzwerkprogrammierung 7
D Socket Dynamische Socket-Thread Erzeugung Netzwerkprogrammierung 2
B Socket Thread handling / Reader init Netzwerkprogrammierung 8
Z Socket Socket-Thread falsch? Netzwerkprogrammierung 5
Helgon Socket Thread Pooling Netzwerkprogrammierung 6
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
B callback thread udp Netzwerkprogrammierung 2
D RMI und Thread Netzwerkprogrammierung 4
S Kommunikationsproblem, Thread und manuel Netzwerkprogrammierung 4
U Socket Abhören eines Sockets/Ports in extra Thread Netzwerkprogrammierung 8
K ein Thread pro Stream Netzwerkprogrammierung 2
D Weiterer Thread auf Port 843 horcht Netzwerkprogrammierung 7
D Thread problem Netzwerkprogrammierung 3
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
S Thread Transport Netzwerkprogrammierung 6
S Socket Thread in Schleife Netzwerkprogrammierung 4
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T synchronized mit thread und rückgabe Netzwerkprogrammierung 4
Q Thread und Sockets... Netzwerkprogrammierung 2
2 Class mit ServerSocket erbt von Thread? Netzwerkprogrammierung 3
PAX Outputstream von anderem Thread verwenden lassen Netzwerkprogrammierung 5
C Server mit Multithreading (Thread-Pool) Netzwerkprogrammierung 2
E java.lang.NullPointerException aber nur wenns im Thread läuf Netzwerkprogrammierung 4
F EIN Thread in RMI auf Serverseite Netzwerkprogrammierung 3
G Server Thread beenden Netzwerkprogrammierung 16
T Socket-Thread: Designfrage Netzwerkprogrammierung 14
S Mit Thread arbeitende Maschine Netzwerkprogrammierung 6
T select() ohne NIO - oder wie Worker-Thread sauber beenden? Netzwerkprogrammierung 9
K Selbe Streams mehrfach nutzen (zusätl. Thread) Netzwerkprogrammierung 6
ven000m Thread Frage Netzwerkprogrammierung 11
B Thread.start() (run()) excption Netzwerkprogrammierung 2
M Thread läuft nicht weiter Netzwerkprogrammierung 2
B NullPointerException | Thread Netzwerkprogrammierung 4
U Current thread not owner Netzwerkprogrammierung 3
S readline-thread stoppt vorzeitig Netzwerkprogrammierung 6
J RMI - (RemoteException occurred in server thread) Netzwerkprogrammierung 2
S Webserverprogrammierung: Thread-Beschränkung Netzwerkprogrammierung 2
M Exception in thread "main" java.lang.NoClassDefFou Netzwerkprogrammierung 2
F problem mit thread bzw. netzwerkverbindung! Netzwerkprogrammierung 3
L netzwerk mit thread Netzwerkprogrammierung 3
G RMI thread safe ? Netzwerkprogrammierung 11
E FTP FTPS Server gibt Fehlernachricht "522 SSL/TLS required on the data channel" zurück Netzwerkprogrammierung 1
Thalion Selector gibt nichts zurück Netzwerkprogrammierung 1
N Proxy gibt keine Antwort zurück Netzwerkprogrammierung 5
M ObjectOutputStream reset gibt IOException Netzwerkprogrammierung 4
R Server gibt "null" aus Netzwerkprogrammierung 2
P Wie gibt man einem GUI Programm ein Web interface? Netzwerkprogrammierung 5
B Upstream messen - gibt es da schon was fertig? Netzwerkprogrammierung 2
H Webserver mit PHP als Java-Programm, gibt es schon so etwas? Netzwerkprogrammierung 12
G Webservice gibt das falsche aus - Wieso Netzwerkprogrammierung 5
B Multicast-Nachrichten-Empfang funktioniert nicht Netzwerkprogrammierung 5
T DataOutputStream Nachrichten werden fehlerhaft gesendet. Netzwerkprogrammierung 1
L Socket Nachrichten senden Netzwerkprogrammierung 3
Creylon Socket Mehrere gleichzeitig eingehende Nachrichten Netzwerkprogrammierung 8
Z Probleme beim Senden von Nachrichten an den Server Netzwerkprogrammierung 9
S javamail und filterung bekannter nachrichten Netzwerkprogrammierung 3
J Nach Dateiversand werden keine Nachrichten mehr übertragen Netzwerkprogrammierung 11
B Socket NIO-Server/Client-Abgeschnittene Nachrichten (Strings) Netzwerkprogrammierung 6
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
F Erhalten und Senden von Nachrichten anhand des Indexes des Clients Netzwerkprogrammierung 19
T Netzwerkchat Problem: Mehrere Nachrichten ~ Anfängerproblem Netzwerkprogrammierung 3
S ICQ Nachrichten abhöhren Netzwerkprogrammierung 4
S Knuddels Chat System: Bot / Nachrichten verschicken? Netzwerkprogrammierung 6
B Nachrichten-Polling? Netzwerkprogrammierung 5
B Nachrichten über das Netzwerk verschicken Netzwerkprogrammierung 3
S Server mit mehreren Clients Nachrichten austauschen Netzwerkprogrammierung 6

Ähnliche Java Themen


Oben