PDA

Visualizza la versione completa : socket java


killall
28-09-2003, 17:15
Ho una chat in java e il server è in attesa che un client si connetti.
il client che ho si collega subito all'avvio.
se ho un nick nel client come posso farlo vedere al server?
il server si crea un vettore di thread che sono in run.
il sistema funziona ma non so come funziona bene il socket.
cioè allevento di una connessione il server non può ottenere + informazioni dal client. se si come so può fare il client?
grazie ciao

LeleFT
28-09-2003, 17:49
Semplice: fai in modo che l'utente inserisca il suo nik e quando preme un pulsante, allora viene effettuata la connessione al server.

Crei una classe Messaggio (che ce l'avrai già) e setti in questa classe il nik dell'utente, poi lo spedisci al server:

Supponiamo che l'ObjectOutputStream della socket si chiami oos:



msg.setNomeUtente(nomeUtente);
oos.writeObject(msg);


In questo modo viene inviato il nome utente al server, che dall'altra parte è in attesa di un messaggio sull'ObjectInputStream (ois):



Messaggio msg = (Messaggio) ois.readObject();
String nomeUtente = msg.getNomeUtente();


Le socket sono utilissime e facili da usare. Quando il server accetta la tua connessione (Socket s = ServerSocket.accept(); ) crea automaticamente una socket, che ti mette a disposizione due oggetti:

InputStream: s.getInputStream();
OutputStream: s.getOutputStream();

che ti servono, rispettivamente, per RICEVERE e SPEDIRE informazioni dall'altra parte. Con questi puoi creare degli ObjectInputStream e ObjectOutputStream per ricevere e spedire degli oggetti Java (Serializable), in modo da avere messaggi strutturati.


Ciao.

denis76
01-10-2003, 22:15
Attenzione però, così c'è il rischio che più utenti possano avere lo stesso nick.
Comunque usando il protocollo tcp vale tutto ciò che è stato scritto, potresti avere unicamente dei problemi sul server a capire quando effettivamente il client si è sconnesso.
Ricordo che la semplice ricarica della pagina html che contiene l'applet da parte del client mi provocava l'avvio di un nuovo thread e sul server faticavo a capire quale era la connessione da abbattere.

Ciao ciao, Denis.

Loading