Newsgroup: it.comp.java
Titolo: Reidirizzare un Socket

Salve a tutti,
avrei un problemino con un Socket, vorrei che una volta che un client si
connette al mio server tramite un socket sulla port 2000 il server
reindirizzi lo stesso socket su di un altro con la port 2500. E'
possibile?
Grazie in anticipo
Ciao
Andrea

 possibile?
Potresti farti un programmino ponte che, aperto un socket alla porta 2500,
attenda una connessione alla porta 2000 e poi comincia a leggere da tale
porta per mandare alla 2500, e viceversa.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

 porta per mandare alla 2500, e viceversa.
Ciao Stefano e grazie per la risposta,
pero' comunque dalla porta 2000 continuo a leggere dati , io invece vorrei un
qualcosa che una volta che il client sia connesso tramite la 2000, lasci la
2000 per mandare dati verso la porta 2500 ... grunt grunt
tu che ne dici?

:

A livello di libreria standard Java, non si puo'.
A livello nativo, dipende dallo stack TCP/IP che hai a disposizione. Pero' io 
non ho mai visto un servizio del genere - ne' in socket BSD ne in WinSock
E' che non e' una cosa che serva a granche' - se vuoi parlare alla 2500, ti 
connetti direttamente alla 2500, no?
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/

 connetti direttamente alla 2500, no?
Si giusto, pero' nel caso mio ho un server che ascolta sulla 2000 per accettare
client e vorrei lasciare la 2000 solo per tale scopo, e far si che gli scambi di
dati tra client e server avvengano su port differenti ... E' al solo fine
esercitativo, nulla di pratico :-)
Pensi che proprio non si possa fare con le Api Java?

Pensi che proprio non si possa fare con le Api Java?
No, non si puo' - ma per un motivo molto semplice: quello a cui accenni
(una variante) e' il comportamento automatico delle socket BSD. :) 
Quando un client si connette, per dire, sulla 2000, lo stack TCP del
server esegue una accept() e apre una porta a caso (a meno che tu non ne
abbia indicata una) su cui avviene la comunicazione effettiva. In java
questo comportamento e' incapsulato in ServerSocket - che non per nulla
come valore di ritorno ha un oggetto *Socket* - quella che usi per
l'effettiva comunicazione. 
Il server puo' tranquillamente tornare in listening sulla 2000 e altri
client si possono connettere. In effetti in server TCP "tradizionali", e'
normale fare una fork di un processo o di un thread separato per gestire
il singolo client, mentre nel processo/thread principale il server torna
in listening. 


 esercitativo, nulla di pratico :-)
Mmm.... ecco l'inghippo. Quando tu fai
ServerSocket ss = new ServerSocket(2000);
while (mi_fa_voglia) {
  Socket s = ss.accept();
  ruzzola_tra_i_dati_di(s); <- verosimilmente lancerai un thread per farlo
}
il socket s, restituito dalla accept(), ha a sua disposizione una porta che gli
viene allocata dal sistema operativo, che sicuramente non sarà la 2000. Se proprio
ci tieni a sapere quale sia non c'è problema, ma non è che fondamentalmente te ne
freghi poi tanto.
Ti era scappato mentre leggevi il manuale? ;)



eheheh  :-)
No, purtroppo lo sapevo, volevo solo chiedre se qualcuno aveva aggirato l'ostacolo in
qualche modo se di ostacolo si puo' parlare.
:-)
Grazie lo stesso