SendtoOnlineClient

Neoon

Mitglied
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:

Java:
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

Gesperrter Benutzer
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

Mitglied
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

Gesperrter Benutzer
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...
 

Kr0e

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

Neoon

Mitglied
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.
 
M

Marcinek

Gast
NUr doch eine Map.

Und mappe ID => Socket

Gruß,

Martin

"Ohne Outputstram keine Competition"
 

Neue Themen


Oben