vorrei tenere traccia dei socket aperti tramite una lista ed inviare a tutti i client , per ogni nuovo client che si connette , un messaggio che avvisa del nuovo utente in linea (messaggio di broadcast) .
Il codice per fare questo "esperimento" è il seguente.
qualcuno paziente ed esperto potrebbe dirmi cosa c'è che non va ? La lista risulta sempre di dimensione 1codice:import java.net.*; import java.io.*; import java.util.*; public class Server { private ServerSocket servSocket; private int porta ;//num di porta su cui accetto connessioni private boolean running; // mi dice finché devo servire il client private ArrayList<Socket> clients; Server(int port){//costruttore this.porta=port; this.running=false; this.servSocket=null; } Server(){ } //METODI public void start(){//mette in ascolto il server try { servSocket=new ServerSocket(porta);//setto il socket running=true; System.out.println("In ascolto sulla porta "+porta); } catch (IOException e) { System.out.println("Impossibile connettersi alla porta "+porta); } while(running){ serve(); } } public void stop(){//fermo il servizio running=false; } public void aggiorna(Socket link){ clients = new ArrayList<Socket>(); clients.add(link);// aggiungo il socket alla lista int tot = clients.size(); PrintWriter OUT; //invio broadcast Socket cl; Iterator<Socket> it = clients.listIterator(); while(it.hasNext()){ cl = it.next(); try { OUT= new PrintWriter(cl.getOutputStream(),true); OUT.println("Un nuovo client è connesso"); OUT.println(tot +"connessi"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void serve(){ try { Socket canale=servSocket.accept();//accetto Thread app = new Application(canale); app.run(); } catch (IOException e) { System.out.println("Impossibile connettersi al client"); stop(); } } public static void main(String[] args){ Server serv = new Server(7777); serv.start(); } } public class Application extends Thread { private Socket connessione; private PrintWriter OUT ; Application(Socket link){ this.connessione=link; } public void run(){ try { Server serv = new Server(); serv.aggiorna(connessione); System.out.println("connesso con il client"); OUT=new PrintWriter(connessione.getOutputStream(),true); OUT.println("benvenuto"); } catch (IOException e) { e.printStackTrace(); } } }
Ovviamente per la classe Application ho usato un altro file (Application.java)

Rispondi quotando
