Newsgroup: it.comp.java
Titolo: "Accoppiare" due socket

Salve!
Per imparare ad usare i socket ed i threads ho scritto
una semplice applicazione per giocare alla morra cinese.
Il server accetta le connessioni e crea un thread per gestire
le "partite" dei vari client. Questo thread non fa altro che
mandare una sequenza casuale di mosse sul socket.
Ora vorrei fare in modo che un client possa vedere chi è
connesso al server e cominciare una partita con un altro
client.
Voi come fareste a connettere l'output stream di un socket
con l'input stream dell'altro socket?
In altre parole, avendo i due socket  :
Server<==>ClientA     e   Server<==>ClientB
Come fareste per ottenere una comunicazione del tipo :
ClientA<==>ClientB    ?
Spero di essere stato sufficientemente chiaro.
Grazie!
--
Guido Spadotto
--------------------------------------------
Togli LA_MOTO dall'indirizzo
e-mail per scrivermi.
---------------------------------------------

Io creerei una coda messaggi sul server in cui vengono inseriti i messaggi
di ogni client e il server li ridirige agli altri client. (Tramite i
socket già aperti)
non so se sono stato chiaro ...
Guido Spadotto wrote:





-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


i miei 2 centesimi:
i dati passano comunque attraverso il server?
se si' leggi da una parte e scrivi dall'altra... giocando con un paio di
thread.
se no devi prevedere di comunicare ai client le info necessarie perche'
siano in grado di stabilire una connessione tra loro senza passare per
il server. ovviamente devi fornire ai client l'intelligenza necessaria.
fare una roba trasparente ai client non e' possibile (a meno di non
usare tecniche particolari, modificare un po' lo stack tcp/ip dei client
e del server, ecc. ... ma qui si esce un po' dallo standard)
ciao
-- 
Seti@Home Java Applets
http://maruko.cjb.net/

 il server. ovviamente devi fornire ai client l'intelligenza necessaria.
Io pensavo di mantenere nel server solo una hash-table che contenga, per
ogni socket attivo, le informazioni sul suo stato, sul nick del giocatore,
ecc.
Così quando un client si connette puo' vedere chi e' connesso e in attesa di
un avversario.
Una volta scelto lo sfidante pensavo di lanciare (dal server) un thread
tipo:
(new GameManager(socket1, socket2)).start()
che gestirà il "dialogo" tra i due client (tramite un certo protocollo)
sollevando
il server dalla gestione delle partite.
In pratica volevo sapere se c'e' un modo migliore rispetto a:
//(nel thread...)
...
PrintWriter out2Server_A=
        new PrintWriter(Socket_A.getOutputStream(), true);
BufferedReader in_from_Server_A=
        new BufferedReader(new
InputStreamReader(Socket_A.getInputStream()));
PrintWriter out2Server_B=
        new PrintWriter(Socket_B.getOutputStream(), true);
BufferedReader in_from_Server_B=
        new BufferedReader(new
InputStreamReader(Socket_B.getInputStream()));
...
//manda un messaggio da client A a client B
out2Server_A.println("Messaggio");
in_from_Server_B.readline();
//manda un messaggio da client B a client A
out2Server_B.println("Messaggio");
in_from_Server_A.readline();
Pensavo di usare gli stream "piped", ma non so se funzionano
sui socket (credo di si... ma devo studiarmeli prima! :) )
Ciao.