# SendtoOnlineClient



## Neoon (5. Jul 2011)

Hey,

Ich habe nach diesen PDF einen TCP Server & Client per Sockets erstellt: http://www.cn-java.com/download/data/book/socket_chat.pdf

Auszug vom sendToAll:


```
void sendToAll( String message ) {
// We synchronize on this because another thread might be
// calling removeConnection() and this would screw us up
// as we tried to walk through the list
synchronized( outputStreams ) {
// For each client ...
for (Enumeration e = getOutputStreams(); e.hasMoreElements(); ) {

// ... get the output stream ...
DataOutputStream dout = (DataOutputStream)e.nextElement();
// ... and send the message
try {
dout.writeUTF( message );
} catch( IOException ie ) { System.out.println( ie ); }
}
}
}
```

Jetzt wollte ich einen einzelnen Client ansprechen, wenn ich diesen ansprechen will muss ich ja entweder ein Username Systen einbauen oder die DataOutputstream daten mitgeben damit diese an den richtigen Client rausgeht. Hatt jemand eine ahnung wie ich das umsetzen könnte?


----------



## Kr0e (5. Jul 2011)

Jedem reinkommenden Clienten verpasst du erstmal ne ID. Du brauchst ausserdem eine Clientklasse:

Darin sollte in etwa sowas sein:

-Der Socket
-Die beiden initialisierten Streams
-ID

Nennen wir die Klasse doch einfach "Client".

Bei einem neuen Clienten erstellst du diese Klasse und packst sie dann in eine HashMap mit der ID als Key und der Client-Klasse als Value. Voila ;-)


----------



## Neoon (7. Jul 2011)

Das problem ist ja ich muss ja irgendwie für den Client den Outputstream abgreifen damit ich diesen anschreiben kann, nur die einzige möglichkeit findet sich im SendtoAll nur dort gibt es eine Liste der Verbundenen. Das hilft mir ja nicht weiter da ich ja nicht weis welche unter den 100 verbundenen der jenige ist den ich ansprechen will. Jemand eine idee wie ich das lösen könnte?


----------



## Kr0e (7. Jul 2011)

Naja, wenn einer Client reinkommt, schickst du einfach an alle Clienten die neue ID des Users. Wenn dann ein Client einem anderen Clienten ne Message schicken will, schickt er zuerst die ID und dann den Inhalt... Eigentlich straight forward...


----------



## Neoon (7. Jul 2011)

Da ist nichts mit ID, ohne Output stream geht garnichts.


----------



## Kr0e (7. Jul 2011)

tut mir Leid, ich verstehe nicht dein Problem. Mein erster Post erklärt alles und der 2te nochmal...


----------



## Neoon (7. Jul 2011)

Ich muss den Output stream kriegen des Users den ich ansprechen will darauf würde dann das mit der ID aufbauen also ohne outputstream geht nichts. Ich habe zwar eine lister der outputstreams also quasi verbindungen aber das hilft mir auch nicht weiter.


----------



## Marcinek (7. Jul 2011)

NUr doch eine Map.

Und mappe ID => Socket

Gruß,

Martin

"Ohne Outputstram keine Competition"


----------

