int/boolean in Object casten

JohnDoe
Ich habe einen chat geschrieben und möchte, dass sich die user per peer2peer auch files senden können. ich möchte daher auf dem server eine portliste auslegen, damit ports nicht doppelt vergeben werden ... ich habe mir vorgestellt ich könnte ein Vector erstellen in dem (port, true/false, port, true/false, ...) eingetragen wird um abzufragen ob ein port im moment von den benutzern belegt ist ...
so nun kann ich aber weder den port (int port) noch das - oder den? - boolean mit veccyDerVector.addElement(int/boolean) adden, da es keine objekte sind ...
bietet es sich da an zwei arrays zu schreiben (int[] portList, boolean[] portFree) oder gibt es eine einfache möglichkeit int/boolean in objecte zu casten?
thx im vorraus
Hanfling
Entweder versteh ich dein Problem nicht, oder warum machst du das nicht einfach ein einen int Array?

Btw. dein Post ist sehr wirr irgendwie...
JohnDoe
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?! verwirrt
großes Grinsen
Hanfling
Du sagst irgnedwie nicht wo du die Codeteile hast. Und übrigens hat Overhead wenig mit Elegant zu tun, jedenfalls.

Mal abgesehen davon das du hoffentlich nicht versuchst zwischen Applets das zu machen...

Mir ist irgendwie nicht klar wie der Traffic laufen soll. Ob das Zwischen den Chat Clients direkt laufen soll (was ich vermute) oder über den Server (was bei dir so aussieht).

Du brauchst das bei Clients doch nur untereinander aushandeln.
Um einen Server Port zu finden, legst du z.B. ne Portrange fest, z.B. 4300-4400

Dann probierst du auf dem einen solange einen ServerSocket zu erstellen bis es klappt und gehst jedesmal einen Port hoch. Nur durch diese Methode kannst du wirklich rausfinden ob ein Port geht.

Dann teilst du über den Server dem anderen Chatclient über einen Befehl in deinem Protokoll mit, das der andere eine Datei schicken will z.B. und der Client versucht sich zu dem Server/Port dann zu verbinden, den der andere Client hat.
JohnDoe
naja ich habs jetzt mit zwei arrays gemacht ...
ja es soll dann zwischen den clients laufen und ja man könnte es auch mit try catch machen, wäre wahrscheinlich evtl sinnvoller, auch wenn man so hohe ports eher nicht benutzt ... ich mag das mit den try catch deshalb nicht so weil ich meine man kann so ne fehlererzeugung ja umgehen, meistens jedenfalls ...
naja egal scheiß mal drauf, aber wenn du mir jetzt noch meine frage beantworten könntest wäre das sehr nett Augenzwinkern
Hanfling
Erm?

Du musst eh Exceptions abfangen bei Netzwerk Kram.
Außerdem wer sagt dir das Programm XY nicht den Port blockiert?

Außerdem hast du bestimmt schonmal mehrere Sachen von einem HTTP/FTP Server gleichzeitig gezogen oder? Vermutlich sogar über den gleichen Port Augenzwinkern

Es hat irgendwie wenig Sinn wie du das machen willst.
JohnDoe
Zitat:
Du musst eh Exceptions abfangen bei Netzwerk Kram.
Außerdem wer sagt dir das Programm XY nicht den Port blockiert?


Zitat:
... und ja man könnte es auch mit try catch machen, wäre wahrscheinlich evtl sinnvoller, auch wenn man so hohe ports eher nicht benutzt ... ich mag das mit den try catch deshalb nicht so weil ich meine man kann so ne fehlererzeugung ja umgehen, meistens jedenfalls ...


das mit den Exceptions ist mir auch klar ... hab ja nur teile hingeschrieben ...

Zitat:
Außerdem hast du bestimmt schonmal mehrere Sachen von einem HTTP/FTP Server gleichzeitig gezogen oder? Vermutlich sogar über den gleichen Port

Es hat irgendwie wenig Sinn wie du das machen willst.


Zitat:
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).


wenn ich nen neun thread mit nem neuen socket auf dem gleichen port erzeuge und das programm laufen lasse bekomme ich eine java_bla_bindexception (sag mir jetzt nicht dass es keine 'java_bla_bindexception' gibt aber so ähnlich ... halt)

Zitat:
naja egal scheiß mal drauf, aber wenn du mir jetzt noch meine frage beantworten könntest wäre das sehr nett
Hanfling
mv Chat.java /dev/null/