2017-05-02 2 views
1

Frage: Im Prinzip für zwei Clients zeigt der Server Nachrichten vom ersten Client und anschließend den zweiten Client nacheinander an, ohne dass mehrere Nachrichten angezeigt werden vom ersten Client dann sagen Sie eine Nachricht vom zweiten Client.Client-Threads und Server, Server zeigt die Nachricht von Client 1 an, dann die Nachricht von Client 2 und dann 1 usw.

Erwartetes Ergebnis: Es können so viele Nachrichten wie möglich auf einem Client gesendet werden, gefolgt von einer anderen Anzahl von Nachrichten auf dem zweiten Client.

Schritte unternommen, um zu versuchen, Probleme zu lösen:

  1. an wenigen Standorten auf Deadlocks Sah, nicht sicher, ob dies ist das gleiche.
  2. versucht zuerst, dann die Output die Input bekommen Sekunde, um den Client zu ändern, um den Server umgekehrt
  3. betrachtet von .filter
  4. auf die Lambda-Syntax Loswerden

Schritte zum Reproduzieren des Problems:

  1. Last up Server
  2. Last up Client 1
  3. Last up Client 2
  4. Nachricht auf dem Client 1
  5. Nachricht auf dem Client 1
  6. Nachricht auf Client 2
  7. Als Ergebnis nur eine Nachricht von jedem Client angezeigt wird

public class PrintLine extends Thread { 

    private ArrayList<ClientThread> al; 
    private Integer count; 

    public PrintLine(ArrayList<ClientThread> al, Integer count) { 
     this.al = al; 
     this.count = count; 
    } 

    @Override 
    public void run() { 
     boolean done = false; 
     List<ClientThread> lines = new ArrayList<ClientThread>(); 
     while (!done) { 
      al.stream().filter(x -> x.sInput == x.sInput).map(x -> x.getSInput()).forEach(sInput -> { 
       try { 
        System.out.println(sInput.readUTF()); 
       } catch (IOException ex) { 
        Logger.getLogger(PrintLine.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      }); 
     } 
    } 
} 

GitHub Link für Projekt: https://github.com/Runite618/ChatRoomVers2/commits/multiThreading

Danke fürs Lesen und für irgendwelche Antworten.

Matthäus.

+0

Also nur wenn eine Nachricht von allen Clients verfügbar ist, sollte eine nächste Runde von Nachrichten gedruckt werden? – bowmore

+0

Sagen Client 1 gibt 2 Nachrichten ein, Client 2 gibt 1 Nachricht ein, Server zeigt nur erste Nachricht von Client 1 und die Nachricht von Client 2 an. –

Antwort

0

Veröffentlichen Sie das für den Fall, dass es jemand anderen hilft.

Ich löste durch Erstellen eines separaten Thread der Ausführung für jeden Client in Bezug auf die PrintLine-Klasse und jetzt können Nachrichten unabhängig voneinander von jedem Client ausgeführt werden.

Matt.

Verwandte Themen