MT5
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.

MT5

Forum per gli studenti di informatica dell'MT5
 
IndiceIndice  CercaCerca  Ultime immaginiUltime immagini  RegistratiRegistrati  Accedi  

 

 Client/Server in Java

Andare in basso 
3 partecipanti
AutoreMessaggio
Carmine
Moderatore
Moderatore
Carmine


Numero di messaggi : 768
Localizzazione : Cosenza
Data d'iscrizione : 16.12.07

Client/Server in Java Empty
MessaggioTitolo: Client/Server in Java   Client/Server in Java Icon_minitimeMar Gen 22, 2008 10:50 pm

Ragazzuoli siccome non ho capito bene bene bene come creare un server multithread in ascolto su una porta e un client che si collega a quella porta e si scambiano messaggi, non è che potreste postare qualcosa fatto da voi? così magari vedendolo e commentandolo insieme lo capisco? Grazie lol!
Torna in alto Andare in basso
joe23
Nuovo Ingresso
Nuovo Ingresso
joe23


Numero di messaggi : 29
Localizzazione : Palmi
Data d'iscrizione : 19.12.07

Client/Server in Java Empty
MessaggioTitolo: Re: Client/Server in Java   Client/Server in Java Icon_minitimeMer Gen 23, 2008 9:26 pm

Allora.....
Nel caso di un server MultiThread l'idea è che ogni volta che esso riceve una connessione avvia un nuovo Thread che si occuperà di comunicare col client, ma questo lo sapevi già Very Happy !!
In particolare quindi il server sarà formato da 2 classi: una principale (Server.java), che accetterà le connessioni e che istanzierà la seconda classe,che estenderà un Thread,(ServerMulti.java).
Classe Server.java:

nel costruttore dovrai creare un oggetto di tipo ServerSocket che starà in ascolto ,in questo caso, sulla porta 4413
serverSocket = new ServerSocket(4413);
La parte interesante è la seguente (anche questa sta nel costruttore):

while (listening) {
try {
1: Socket socket = serverSocket.accept();
2: PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
3: BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
4: clientList.add(out);
5: new ServerMulti(out,in,socket);
for(PrintWriter o:Server.clientList) {
System.out.println(Server.clientList.indexOf(o));
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
Ogni volta che un client si collega al server creo un socket con l'istruzione alla riga 1.
Poi creo un oggetto di tipo PrintWriter ed uno di tipo BufferedReader per l'input e l'output attraverso il socket stesso, righe 2 e 3
Come attributo della classe Server mi creo un ArrayList<PrintWriter> che servirà per spedire messaggi a tutti i client:
static ArrayList<PrintWriter> clientList = new ArrayList(); (in questo caso statico per dargli visibilità da ServerMulti.java, volendo avrei potuto dichiararlo non statico e passarlo come parametro al costruttore di ServerMulti.java)
Nella riga 4 aggiungo per ogni client il PrintWriter ad esso associato dentro clientList.
Nella riga 5 creo una nuova istanza della classe ServerMulti.java passando come parametro il PrintWriter, il BufferedReader ed il socket.

Classe ServerMulti.java
Come già detto ServerMulti sarà un Thread:
public class ServerMulti extends Thread {.....}
La parte interessante è il metodo run del Thread:

public void run() {
try {
while (!fine) {
try {
String inputLine = in.readLine();
processaInput(inputLine);
} catch (Exception e) {
fine = true;
}
}

out.close();
in.close();
socket.close();

} catch (Exception e) {
e.printStackTrace();
}
}
Il Thread sta sempre in ascolto di un input da parte del client a cui è associato. Quando il client invia una linea la salvo nella stringa InputLine:
String inputLine = in.readLine();
il metodo processa input stabilisce il protocollo che client e server devono utilizzare per comunicare, per esempio:

public void processaInput(String input) {
if(input.equals("#quit")) {
fine = true;
}
else {
for(PrintWriter o:Server.clientList) {
o.println(input);
}
}
}
Se il client scrive "#quit" fine viene posto a true, il while finisce e viene chiusa la connessione.
se invece il client scrive qualsiasi altra cosa (ramo else) ciclo sull'ArrayList definito in Server.java e mando ad ognuno l'input ricevuto. Così facendo quello che scrive un client verrà inviato a tutti glia altri, in particolare il messaggio tornerà anche al client che lo ha spedito.
Praticamente è una chat, inserire gli username sarebbe abbastanza semplice.
Il programmino può essere testato con telnet, oppure fai un client Very Happy
Ecco i 2 file:

http://web.i2000net.it/gioperna/Server.java
http://web.i2000net.it/gioperna/ServerMulti.java
Torna in alto Andare in basso
Carmine
Moderatore
Moderatore
Carmine


Numero di messaggi : 768
Localizzazione : Cosenza
Data d'iscrizione : 16.12.07

Client/Server in Java Empty
MessaggioTitolo: Re: Client/Server in Java   Client/Server in Java Icon_minitimeGio Gen 24, 2008 12:19 pm

Bellissima lol! me la studio un pò e ti faccio sapere study
Torna in alto Andare in basso
KillerCD
Moderatore
Moderatore
KillerCD


Numero di messaggi : 380
Età : 37
Localizzazione : Proprio Cosenza Cosenza
Data d'iscrizione : 16.12.07

Client/Server in Java Empty
MessaggioTitolo: Re: Client/Server in Java   Client/Server in Java Icon_minitimeGio Gen 24, 2008 1:50 pm

Giovà TVTTTB
Torna in alto Andare in basso
http://greensmurf.wordpress.com/
Carmine
Moderatore
Moderatore
Carmine


Numero di messaggi : 768
Localizzazione : Cosenza
Data d'iscrizione : 16.12.07

Client/Server in Java Empty
MessaggioTitolo: Re: Client/Server in Java   Client/Server in Java Icon_minitimeSab Gen 26, 2008 1:16 pm

Oggi ho fatto un serverino molto semplice ma mi è servito per capire come funzionano i socket, prossimo scoglio server multithread lol! vi terrò aggiornati study
Torna in alto Andare in basso
Contenuto sponsorizzato





Client/Server in Java Empty
MessaggioTitolo: Re: Client/Server in Java   Client/Server in Java Icon_minitime

Torna in alto Andare in basso
 
Client/Server in Java
Torna in alto 
Pagina 1 di 1
 Argomenti simili
-
» Client irc java (nIRC)
» piccolo tips in java
» VPN client e Netgear 834G Router
» Core Java in PDF
» Errore in java (NoClassDefFoundError)

Permessi in questa sezione del forum:Non puoi rispondere agli argomenti in questo forum.
MT5 :: Fai da te :: Aiuto-
Vai verso: