also: wenn ich jetzt clients habe (bsp 3 clients)
client1 möchte client2 etwas schicken und gleichzeitig möchte client2, client3 etwas schicken.
klar?!
es werden neue sockets erzeugt, blos auf welchem port jetzt?!
problem: erzeuge ich einen socket auf bsp 6000 fest, dann kann der client2, wenn der transfer von client1 zu client2 läuft, nichts an client3 schicken, da der port 6000 ja schon in use ist (oder habe ich da einen denkfehler).
klar?!
so deshalb wollte ich jetzt einen vector (vector deshalb, weil ich dann int UND boolean darin speichern kann) auf dem server anlegen der meinetwegen 1000 ports anbietet:
int port = 6000;
Vector veccyDerVector = new Vector();
int i = 0;
while(i < 2000)
{
// jedes zweite mal wird der port geaddet: {6001, 6002, 6003, 6004, ...}
if(i%2 == 0) veccyDerVector.addElement(port++); // geht nicht da port ein int
und kein object ist
// jedes (andere) zweite mal wird true geaddet, da die ports ja noch nicht benutzt
werden ...
else veccyDerVector.addElement(true); // geht auch nicht da true ein
boolean und kein object ist
}
// gewünschtes ergebnis: veccyDerVector{6001, true, 6002, true, 6003, true, ...}
klar?!
client1 möchte nun client2 etwas schicken:
schickt nun an den server (bei mir: "username1: /portrequest")
der server macht dann folgendes:
boolean freePortFound = false;
int i = 1;
while(i < 2000 && !freePortFound)
{
//das '(boolean)' und '(int)' rein hypothetisch wenn das casten so funzen würde
if( (boolean)veccyDerVector.elemenAt(i) == true )
{
send( @username, (int)veccyDerVector.elementAt(i-1) ) //send() ist meine
verschickt funktion,
das '@username'
sieht im original
natürlich anders aus
veccyDerVector.removeElementAt(i); //bin mir nicht sicher ob das die
veccyDerVector.insertElementAt(i, false); richtigen funktionen sind, aber
so ähnlich ...
freePortFound = true;
}
else i += 2;
}
//gewünschtes ergebnis: veccyDerVector{6001, false, 6002, true, ...}
klar?!
so möchte nun client2 gleichzeitig etwas an client3 schicken:
gleiches prozedere wie oben ...
//gewünschtes ergebnis: veccyDerVector{6001, false, 6002, false ...}
so benutzen beide verschiedene ports ...
klar?!
nach dem beenden des erseten transfers sollte veccyDerVector so aussehen:
veccyderVector{6001, true, 6002, false, 6003, true, ...}
natürlich kann man das ganze auch mit zwei arrays lösen, aber wenn man jetzt aus int und boolean leicht objects machen kann, fände ich das mit dem vector eleganter ...
alles klar?!