# while-schleifen prob



## stiewen (5. Mrz 2006)

leute, ich flippe aus, seit 3 Tagen sitze ich an dieser Schleife:


```
Shessi2_1 jFrParent;
  Database database;
  byte[] buf = new byte[100];
  DatagramPacket dpRec;
  public MultiSocketServer ( Shessi2_1 jFrPar ) {
    jFrParent = jFrPar;
    database = jFrParent.database;
  }
  public void run (  ) {
    try {
      String strTemp;
      String[] strTempList;
      while ( true ) {
        dpRec = new DatagramPacket(buf, buf.length);
        database.msSocket.receive(dpRec);
        System.out.println("da" );
        strTemp = new String(dpRec.getData());
        if ( strTemp.startsWith("SignedOn|") && !strTemp.substring(9).startsWith(database.strUserName) && !jFrParent.jdlmList.contains(strTemp.substring(9)) ) {
          StringTokenizer stTemp = new StringTokenizer(strTemp.substring(9), "|");
          strTemp = stTemp.nextToken();
          jFrParent.jdlmList.addElement(strTemp);
          database.hmContacts.put(strTemp, stTemp.nextToken());
          String msg = "AddGroupMember|" + "Dieter" + "|" + database.strUserIP;
          DatagramPacket dpSignUser = new DatagramPacket(msg.getBytes(), msg.length(), database.iaGroup, database.intPort3);
          database.msSocket.send(dpSignUser);
        } else if ( strTemp.startsWith("AddGroupMember|") && !strTemp.startsWith("AddGroupMember|" + database.strUserName) && !jFrParent.jdlmList.contains(strTemp.substring(9)) ) {
          StringTokenizer stTemp = new StringTokenizer(strTemp.substring(15), "|");
          strTemp = stTemp.nextToken();
          jFrParent.jdlmList.addElement(strTemp);
          database.hmContacts.put(strTemp, stTemp.nextToken());
        }
        buf = new byte[100];
        dpRec.setData(buf);
        strTemp = "";
        Thread.sleep(500);
      }
    } catch ( Exception e ) {
      new ExceptionHandler("MultiSocketServer Exception" + e.toString());
    }
  }
```

das prob: jFrParent.jdlmList.addElement(strTemp); legt mir unmengen an daten in meine JList! 
habs schon mit synchronized versucht... geht auch net


----------



## André Uhres (5. Mrz 2006)

stiewen hat gesagt.:
			
		

> ```
> ...
> while ( true ) {
> ...
> ...


Wenn die Schleife schon 3 Tage läuft ist das ja auch kein Wunder.


----------



## stiewen (5. Mrz 2006)

sry, hätte vll sagen müssen, dass Zeile 15

```
database.msSocket.receive(dpRec);
```
blockiert bis was ankommt...  :meld:


----------



## André Uhres (5. Mrz 2006)

Willste damit sagen daß in JList mehr ankommt als auf der Konsole (System.out.println("da" ); ) ?


----------



## Stiewen (5. Mrz 2006)

im gegenteil!
In der Konsole kommt noch viel mehr an! normalerweise soll bloß 3 mal durchgelaufen werden und dann hälts an ... 
aber er printet irgendwie 13 mal "da" und gibt mir 6 Elemente inne jlist


----------



## André Uhres (5. Mrz 2006)

Das soll ne Unmenge sein?
Aber egal, vor der Konsolenausgabe steht ja auch keine Bedingung. Somit ist es vollkommen normal, daß da mehr rauskommt.


----------



## Stiewen (5. Mrz 2006)

Also, ich habs hinbekommen, wie ich wollte...

```
Shessi2_1 jFrParent;
  Database database;
  byte[] buf = new byte[100];
  DatagramPacket dpRec = new DatagramPacket(buf, buf.length);
  public MultiSocketServer ( Shessi2_1 jFrPar ) {
    jFrParent = jFrPar;
    database = jFrParent.database;
  }
  public void run (  ) {
    try {
      String strTemp;
      String[] strTempList;
      while ( true ) {
        database.msSocket.receive(dpRec);
        strTemp = new String(dpRec.getData());
        System.out.println("über: " + strTemp );
        if ( strTemp.startsWith("SignedOn|") && !strTemp.substring(9).startsWith(database.strUserName) ) {
          System.out.println("empfangen: " + strTemp );
          StringTokenizer stTemp = new StringTokenizer(strTemp.substring(9), "|");
          strTemp = stTemp.nextToken();
          jFrParent.jdlmList.removeElement(strTemp);
          jFrParent.jdlmList.addElement(strTemp);
          database.hmContacts.put(strTemp, stTemp.nextToken());
          String msg = "AddGroupMember|" + database.strUserName + "|" + database.strUserIP;
          System.out.println("gesendet: " + msg );
          DatagramPacket dpSignUser = new DatagramPacket(msg.getBytes(), msg.length(), database.iaGroup, database.intPort3);
          database.msSocket.send(dpSignUser);
        } else if ( strTemp.startsWith("AddGroupMember|") && !strTemp.substring(15).startsWith(database.strUserName) ) {
          StringTokenizer stTemp = new StringTokenizer(strTemp.substring(15), "|");
          strTemp = stTemp.nextToken();
          jFrParent.jdlmList.removeElement(strTemp);
          jFrParent.jdlmList.addElement(strTemp);
          database.hmContacts.put(strTemp, stTemp.nextToken());
        }
      }
    } catch ( Exception e ) {
      new ExceptionHandler("MultiSocketServer Exception" + e.toString());
    }
  }
```
Prob ist aber jetzt: wenn ich das Programm auf dem Rechner meines Dads laufen lasse und es bei mir starte, gibt er das bei meinem Dad aus... anders herum aber nicht... zudem: 

```
String msg = "AddGroupMember|" + database.strUserName + "|" + database.strUserIP;
          System.out.println("gesendet: " + msg );
          DatagramPacket dpSignUser = new DatagramPacket(msg.getBytes(), msg.length(), database.iaGroup,
```
das soll ja nochmal zurückgeschickt werden, dass der NewAngemeldete nachrichten von all denen bekommt, die schon on sind ... das kommt aber auf keiner seite an ...


----------

