Un piccolo server:
codice:
import java.io.*;
import java.net.*;
import java.util.Vector;
public class MioServer extends Thread {
private class GestioneClient extends Thread {
private ObjectInputStream ois;
private ObjectOutputStream oos;
public GestioneClient(ObjectInputStream ois, ObjectOutputStream oos) throws Exception {
this.ois = ois;
this.oos = oos;
}
public void run() {
try {
// Attendo l'arrivo di un messaggio
msg = (String) ois.readObject();
// Elaboro il messaggio arrivato
System.out.println("Server - ho ricevuto questo messaggio: " + msg);
} catch (Exception e) { e.printStackTrace(); }
}
public void inviaMessaggio(String messaggio) {
// Invio il messaggio al client
try {
oos.writeObject(messaggio);
} catch (Exception e) { e.printStackTrace(); }
}
}
private ServerSocket server;
private Socket client;
private Vector listaClient;
private final int PORTA = 2525;
public MioServer() {
try {
listaClient = new Vector();
server = new ServerSocket(PORTA);
} catch (Exception e) { e.printStackTrace(); }
}
public void run() {
try {
// Attendo che un client si colleghi al server
client = server.accept();
listaClient.add(
new GestioneClient(
new ObjectInputStream(client.getInputStream()),
new ObjectOutputStream(client.getOutputStream())
)
);
// Avvio il gestore del client appena connesso
((GestioneClient) listaClient.elementAt(listaClient.size()-1)).start();
} catch (Exception e) { e.printStackTrace(); }
}
public static void main(String [] args) {
MioServer ms = new MioServer();
}
}
Un piccolo client:
codice:
import java.io.*;
import java.net.*;
public class MioClient extends Thread {
private Socket server;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private InetAddress mioIndirizzo;
private final int PORTA = 2525;
private byte [] ipServer = {/* IP del server */};
/* Esempio di IP del server: 158.110.0.1
{(byte) 158, (byte) 110, (byte) 0, (byte) 1} */
public MioClient() {
try {
indirizzo = InetAddress.getByAddress(ipServer);
} catch (Exception e) { e.printStackTrace(); }
}
public void run() {
try {
// Mi collego al server
server = new Socket(indirizzo, PORTA);
ois = new ObjectInputStream( server.getInputStream() );
oos = new ObjectOutputStream( server.getOutputStream() );
while (true) {
// Attendo il messaggio
String msg = (String) ois.readObject();
// Elaboro il messaggio
System.out.println(msg);
}
} catch (Exception e) { e.printStackTrace(); }
}
public void inviaMessaggio(String messaggio) {
// Invio il messaggio
try {
oos.writeObject(messaggio);
} catch (Exception e) { e.printStackTrace(); }
}
public static void main(String [] args) {
MioClient mc = new MioClient();
}
}
Questo è un piccolo esempio (non tanto usabile) di Client e di Server. Queste due classi classi possono essere usate all'interno di applicazioni più grandi (ovviamente adattate) per avere un Server in attesa di n clients, e per avere un client che si collega al server.
I messaggio qui sono delle semplici Stringhe, nulla ti vieta di usare classi più complesse che implementano Serializable.
Ciao.