Salve, secondo voi cosa è che non va in questo codice? Il server si pone in stato di accept, ma non accetta la connessione di un client:
Il client è invece:codice:public class Server { private ArrayList <Socket> clients; private ServerSocket server; private ArrayList <ObjectInputStream> inputs; private ArrayList <ObjectOutputStream> outputs; private Executor esecutoreThreads; public Server(int porta,int coda) { esecutoreThreads = Executors.newCachedThreadPool(); creaSocket(porta,10); esecutoreThreads.execute(new AcceptTask()); } private class AcceptTask implements Runnable { public void run() { System.out.println("Sono in attesa di un client..."); accettaClient(); System.out.println(numeroPeerConnessi()); esecutoreThreads.execute(new AcceptTask()); } } public int numeroPeerConnessi() { return clients.size(); } public void terminaServer() { try { for (int i = 0; i < inputs.size() || i < outputs.size() || i< clients.size(); i++) { inputs.get(i).close(); outputs.get(i).close(); clients.get(i).close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void creaSocket(int porta,int coda) { try { server = new ServerSocket(porta,coda); } catch (IOException e) { e.printStackTrace(); } } private void accettaClient() { try { Socket temp = server.accept(); ObjectInputStream input = new ObjectInputStream(temp.getInputStream()); ObjectOutputStream output = new ObjectOutputStream(temp.getOutputStream()); output.flush(); clients.add(temp); inputs.add(input); outputs.add(output); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Uso un main in cui faccio partire il server:codice:public class Client { private Socket server; private ObjectInputStream input; private ObjectOutputStream output; public Client(String indirizzo, int porta) { connect(indirizzo,porta); } public void terminaClient() { try { input.close(); output.close(); server.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void connect(String indirizzo, int porta) { try { server = new Socket(indirizzo,porta); input = new ObjectInputStream(server.getInputStream()); output = new ObjectOutputStream(server.getOutputStream()); System.out.println("Sono connesso a" + server.getLocalPort()); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
E un main per far partire i client:codice:public class MainServer { public static void main(String[] args) { Server server = new Server(4000,10); } }
codice:public class MainClient { public static void main(String[] args) { Client client = new Client("127.0.0.1",4000); } }

Rispondi quotando

