Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 32
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60

    Comunicazione client-server

    Devo avere un server con collegati + client.
    Ho creato il mio server e un'altra classe Thread del server, poi ho tenuto traccia dei vari client connessi e gli ho messi in un CopyOnWriteArrayList.
    fino a qua tutto bene i client si connettono.
    Poi se scrivo dal client qualcosa per farlo stampare contemporaneamente a tutti gli altri client connessi come posso fare.
    Nella run() ho scritto ((for (List c:list) {
    if (c!=this) {
    c.send(message);})).
    Ma non stampa contemporaneamente a tutti.
    Tiene traccia e quando scrivo qualcos'altro da un client diverso mi stampa quello ke avevo scritto nel client precedente.
    Soluzioni?? grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60
    ovvero sono nel client1 scrivo pippo stampo sul client1 ricevuto pippo.
    Vado nel client2 non ho stampato niente.. scrivo pluto mi stampa ricevuto pippo, se poi continuo mi stampa pluto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Comunicazione client-server

    bisognerebbe capire bene quello che succede (perché non è che ti sai spiegare).
    Originariamente inviato da loma
    Tiene traccia e quando scrivo qualcos'altro da un client diverso mi stampa quello ke avevo scritto nel client precedente.
    Soluzioni?? grazie
    Serve un caffè? Un té ? pasticcini?
    Ricorda come vanno le comunicazioni: tu fai una richiesta al server (anche mantenendo la connessione), questa viene presa e gestita dal server. Dal canto suo il server "mette" in coda il messaggio agli altri componenti, quando gli altri componenti dicono "ricevi" o iniziano una comunicazione, prendono quel messaggio in coda. Ma nel tuo caso, il messaggio successivo viene ricevuto alla richiesta successiva.

    Inoltre che vuole dire questo controllo????

    codice:
    if (c!=this)
    messo nella run di chi?
    RTFM Read That F*** Manual!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60
    si il problema è spiegare un codice senza vederlo non è facile.
    Volevo sapere come funziona la stampa dei messaggi ke il server manda ai client connessi.
    Perchè non riesco a farli stampare da eclipse in console contemporaneamente ma è come se gli altri client connessi tengano memoria e poi li stampano dopo quando schiaccio l'invio su quel client.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    senza vedere il codice l'unica cosa che posso pensare è che appena premi invio la prima cosa che fai è svuotare il buffer in input, che ha i messaggi accodati precedentemente (e ti ho detto la stessa cosa sopra)
    RTFM Read That F*** Manual!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60
    codice:
    public class ChatClientHandler implements Runnable { //classe del server chatClientHandler è una lista con i client connessi
    
    	private Socket socket;
    	private List<ChatClientHandler> chatClientHandlers;
    	private ServerSocket serverSocket;
    	private Scanner in;
    	private PrintWriter out;
    	
    	public ChatClientHandler(Socket socket,
    			List<ChatClientHandler> chatClientHandlers,
    			ServerSocket serverSocket) {
    		this.socket = socket;
    		this.chatClientHandlers = chatClientHandlers;
    		this.serverSocket = serverSocket;
    	}
    	
    	public synchronized Socket getSocket() {
    		return socket;
    	}
    
    	@Override
    	public void run() {
    		try {
    			in = new Scanner(socket.getInputStream());
    			out = new PrintWriter(socket.getOutputStream());
    			
    			while (true) {
    				String linea = in.nextLine();
    				if (linea.equals("off")) {
    					closeServer();
    				} else {
    					sendToAll(linea);
    				}
    			}
    			
    		} catch (IOException e) {
    			System.err.println(e.getMessage());
    		}
    	}
    	
    	public synchronized void send(String message) {
    		if (socket.isConnected()) {
    			out.println(message);
    			out.flush();
    		}
    	}
    	
    	private void closeServer() throws IOException {
    		synchronized (serverSocket) {
    			if (!serverSocket.isClosed()) {
    				serverSocket.close();
    			}
    		}
    	}
    	
    	private void sendToAll(String message) {
    		for (ChatClientHandler c:chatClientHandlers) {
    			if (c!=this) {
    				c.send(message);
    			}
    		}
    	}
    
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60
    codice:
    public class LineClient { //classe del client 
    	private String ip;
    	private int port;
    	
    	public LineClient(String ip, int port) {
    		this.ip = ip;
    		this.port = port;
    	}
    	
    	public static void main(String[] args) {
    		LineClient client = new LineClient("127.0.0.1", 4747);
    		try {
    			client.startClient();
    		} catch (IOException e) {
    			System.err.println(e.getMessage());
    		}
    	}
    	
    	public void startClient() throws IOException {
    		Socket socket = new Socket(ip, port);
    		System.out.println("Connection established");
    		Scanner socketIn = new Scanner(socket.getInputStream());
    		PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
    		Scanner stdin = new Scanner(System.in);
    		
    		try {
    			while (true) {
    				String inputLine = stdin.nextLine();
    				socketOut.println(inputLine);
    				socketOut.flush();
    				String socketLine = socketIn.nextLine();
    				/*turno=getTurno;
    				if(socketLine.equals(turno)){	
    				}*/
    				System.out.println(socketLine);
    			}
    		} catch(NoSuchElementException e) {
    			System.out.println("Connection closed");
    		} finally {
    			stdin.close();
    			socketIn.close();
    			socketOut.close();
    			socket.close();
    		}
    	}
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non sei nuovo, i tag codeeeee


    e come ti ho detto poco fa, tu guardi cosa c'è sul buffer in ingresso solo dopo aver premuto invio (e inviato il messaggio). Un altro messaggio lo leggi al passo successivo.

    Dovresti impostare meglio questo canale bidirezionale asincrono

    Altre analisi mi rifiuto di farle con il codice in quelle condizioni
    RTFM Read That F*** Manual!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60
    eh cavolo è qua ke fa casino.
    Devo rimandarteli identati??

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60
    ovvero cosa posso fare??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.