Newsgroup: it.comp.java
Titolo: [Java] Realizzare una Chat testuale - 2 Client e 1 Server

Ciao a tutti, mi servirebbe un aiuto con un esercizio di reti da
svolgere con Java. Sono alle prime armi sia con Java che con la
programmazione per i socket di rete..
Dovrei realizzare un server che permetta di eseguire un chat testuale
tra due client.
Se non ho capito sbagliato, la parte più importante è il server, che
riceve una stringa da un client e la ridireziona verso l'altro client
collegato.
Attualmente ho disponibile il codice esempio di un client che invia una
stringa alfanumerica verso un server, questo la legge e rimanda il
medesimo messaggio mettendo però le lettere in maiuscolo.
Il client non mi sembra quindi da modificare, perchè la parte di
letture dei dati scritti dall'utente e spedizione verso il server già
la esegue.
Il server di esempio però rimandava la stringa verso il clientr di
partenza, mentre nell'esercizio che devo svolgere, deve rimandarla
all'altro client.
Il client conosce in anticipo l'indirizzo ip del server.
Come posso modificare il codice per far si che si possa fare ciò ?
Metto qui sotto i codici del client e il codice del server che ho come
esempio
  "code:SERVER"
    import java.io.*;
    import java.net.*;
    class TCPServer {
      public static void main(String argv[]) throws Exception
        {
          String clientSentence;
          String capitalizedSentence;
          ServerSocket welcomeSocket = new ServerSocket(6860);
          while(true) {
               Socket connectionSocket = welcomeSocket.accept();
               System.out.println("connesso con " +
    		connectionSocket.getInetAddress());
               BufferedReader inFromClient =
                  new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
    	    DataOutputStream  outToClient =
                 new
DataOutputStream(connectionSocket.getOutputStream());
               clientSentence = inFromClient.readLine();
               System.out.println("FROM CLIENT: " + clientSentence);
               capitalizedSentence = clientSentence.toUpperCase() +
'\n';
               System.out.println("TO CLIENT: " + capitalizedSentence);
               outToClient.writeBytes(capitalizedSentence);
            }
        }
    }
- - - - - - -
" code:CLIENT "
  import java.io.*;
    import java.net.*;
    class TCPClient {
        public static void main(String argv[]) throws Exception
        {
            String sentence;
            String modifiedSentence;
            BufferedReader inFromUser =
              new BufferedReader(new InputStreamReader(System.in));
    	for (int i=0; i < argv.length; i++)
            	System.out.println("argv[" + i + "]" + argv[i]);
            Socket clientSocket = new Socket(argv[0], 6860);
            DataOutputStream outToServer =
              new DataOutputStream(clientSocket.getOutputStream());
              BufferedReader inFromServer =
              new BufferedReader(new
              InputStreamReader(clientSocket.getInputStream()));
            sentence = inFromUser.readLine();
            outToServer.writeBytes(sentence + '\n');
            modifiedSentence = inFromServer.readLine();
            System.out.println("FROM SERVER: " + modifiedSentence);
            clientSocket.close();
 
        } 
    }

Nessun aiuto ??
Praticamente dovrei fare una cosa del genere
Client 1 scrive qualcosa -> passaggio attaverso il server -> Client 2
legge
Client 2 risponde -> passaggio sempre attraverso il server -> Client 1
legge
Ho visto su vari siti esempi di chat molto complesse, che potevano
accettare un numero di client molto elevato, ed in cui tutti potevano
vedere ciò che un client aveva inviato verso il server. Utilizzavano
la tecnica del multithread, che io non saprei però realizzare...
(purtroppo le mie conoscenze su Java sono abbastanza limitate)
Avendo solo due client connessi, non esiste un sistema più semplice
per realizzare il server di questa piccola "chat a due" ?
Come faccio a reindirizzare quello che ha scritto un client verso
l'altro ?

ciao,
puoi fare cosi:
un client che vuole entrare in chat manda una richiesta al server,
il quale conferma la cosa e avverte l'altro client.
Ogni client dovrebbe essere composto da due thread,
uno che riceve i messaggi dal server, l'altro che li invia.
il serve riceve il messaggio di un client e lo propaga agli altri
un esempio di formato di messaggi in ricezione da parte del client
potrebbe essere
REC_MESS from lunghezzaMessaggio messaggio
NEW_USER nick
DISCONNECTED nick
un esempio di formato dati da inviare al server potrebbe essere:
SEND lunghezzaMessaggio messaggio
spero di averti ato qualche dritta

 
Per fare quello che devi fare devi per forza usare i Thread.
Il server dovrà avere un thread per ogni utente collegato. A questo 
thread dovrai passare il socket. dal socket prendi il comando e invi il 
tutto con un socket in uscita verso il client destinatario.
Pure il client deve essere multithread. lui deve avere un thread per 
l'invio e uno per l'ascolto.
Io ho fatto un programma analogo. Ora lo sto migliorando e sto creando 
un protocollo a linea di comando.
CMQ se vuoi ti posso mandare il mio vecchio progetto (o anche una 
anteprima del nuovo).
Ciao
 
-- 
Dott. Hellboy
MSN: 
simo...@hotmail.com
IChat: 
simo...@mac.com
http://www.hardboiled.it

Grazie per il chiarimento !!!
Ti ho mandato una mail al tuo indirizzo Gmail, ciao !