Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81

    Problema su progetto in RMI

    Salve a tutti, sto realizzando un progettino in RMI e ho il seguente problema:
    Dato un Server e un Client, il server deve visualizzare il desktop del client. Per fare ciò, il client crea uno screenshot e lo invia al server. Il server lo visualizzerà. Poichè però, il comando di fare lo screenshot, lo da' il server al client, una volta che il client parte per eseguire il comando, sul server mi compare lo screenshot del server stesso nonostante a fare lo screen shot sia il client in un altro pc.

    il metodo che viene invocato sul client da server, è un VOID quindi dovrebbe avere effetto sul client ed invece non è cosi.

    Il client si collega al server, gli passa il suo riferimento di modo che il server puo invocare i metodi del client in remoto.
    Questo è il metodo cliamato dal client sul server:

    codice:
    @Override
    synchronized public void initalizeChannel(IClient client) throws RemoteException {
    	if (!channels.containsKey( client.getIdentifier() )) {
    		try {
    			String identifier = client.getIdentifier();
    			ChannelPanel cc = new ChannelPanel( identifier );
    			Channel channel = new Channel();
    			channel.setChannelPanel(cc);
    			channel.setClient(client);
    			channels.put( identifier , channel );
    			guiServer.pScrool.addSchermo(cc);
    					
    			/*  PARTE LA VIDUALIZZAZIONE  */
    			channels.get( identifier ).getClient().startSendScreenView() ;			
    		} catch (Exception e) { e.printStackTrace(); }	}  }
    l'ultima riga di codice chiamerà il metodo sul client.


    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    up
    Inoltre mi sapete dire se RMI è una tecnologia utilizzabile anche via internet oltre che via Lan?

    Grazie

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Il server come lo ottiene il riferimento al client?


    Originariamente inviato da foralobo
    RMI è una tecnologia utilizzabile anche via internet?
    Certo.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    Originariamente inviato da Alex'87
    Il server come lo ottiene il riferimento al client?
    Non ho capito la domanda.

    Vediamo se riesco ad interpretarla:

    Il server mette nel registro il riferimento di se stesso:

    codice:
    try {
    	LocateRegistry.createRegistry(1099);
    } catch (ExportException ex) { System.out.println("ERRORE...");		}
    	
    	String path = "rmi://localhost/ServerImpl";
    	Naming.rebind( path, this );
    Il client si collega ed ottiene un riferimento al server cosi:
    codice:
    String remoteName = "rmi://" + ipServer + "/ServerImpl";
    server = (IServer) Naming.lookup( remoteName );
    dove "ipServer" è l'ip del pc dove gira il server.

    Una volta che il client ottiene un riferimento al server, chiama un , metodo sul server perchè il server possa ottenere il riferimento al client. Il metodo in questione è quello citato prima (initalizeChannel) e come parametro di questo metodo viene passato il riferimento stesso al client di modo che il server possa invocare i metodi del client.

    Ovviamente oltre a fare questo, il metodo "initalizeChannel (IClient client)" fa altre cose poichè il server tiene in memomoria il riferimento di tanti client che il server gestisce e vede come canali. Poi alla fine, lo stesso metodo chiama un metodo sul client: è questo il metodo che crea lo screenshoot e lo invia a sua volta al server che lo visualizzerà. Questo metodo è messo qui provvisoriamente per fare test, poi lo metterò in un pulsante dedicato e lo farò partire non direttamente.


    In sintesi è questo il funzionamento, non so sè è buona prassi passare il come parametro, il riferimento di una classe che estende una classe Remote ma mi sembrava molto più pulito e semplice

    Io ho pensato che magari il prob potrebbe essere che il metodo chiamato dal server effettua operazioni sul server o potrebbe arrivare un problema dal fatto che il server client chiama e il server risponde chimando a sua volta il client.

    Grazie

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da foralobo
    Non ho capito la domanda.

    Vediamo se riesco ad interpretarla:

    Il server mette nel registro il riferimento di se stesso:

    codice:
    try {
    	LocateRegistry.createRegistry(1099);
    } catch (ExportException ex) { System.out.println("ERRORE...");		}
    	
    	String path = "rmi://localhost/ServerImpl";
    	Naming.rebind( path, this );
    Il client si collega ed ottiene un riferimento al server cosi:
    codice:
    String remoteName = "rmi://" + ipServer + "/ServerImpl";
    server = (IServer) Naming.lookup( remoteName );
    dove "ipServer" è l'ip del pc dove gira il server.

    Una volta che il client ottiene un riferimento al server, chiama un , metodo sul server perchè il server possa ottenere il riferimento al client. Il metodo in questione è quello citato prima (initalizeChannel) e come parametro di questo metodo viene passato il riferimento stesso al client di modo che il server possa invocare i metodi del client.
    Il metodo che chiami sul client è un metodo remoto? E' cioè presente in un'interfaccia remota implementata dal client? In caso contrario, è corretto che il codice del client venga eseguito sulla macchina del server: quando il server ottiene il riferimento al client in realtà ne ottiene una copia: il client sulla macchina client e il client sulla macchina server ora sono due oggetti distinti, senza legami. Dovresti avere un metodo remoto per fare quello che vuoi fare.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    Originariamente inviato da Alex'87
    Il metodo che chiami sul client è un metodo remoto? E' cioè presente in un'interfaccia remota implementata dal client?
    Certamente!!

    Il metodo sopracitato che inizializza il client sul server, riceve come parametro il riferimento al server è vero ma l'argomento riceve un tipo "IClient" ovvero l'interfaccia che poi il client implementa, quindi non potrei chiamare altri metodi al di fuori da quelli remoti...e il metodo chiamato, lavora sul client

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da foralobo
    Certamente!!

    Il metodo sopracitato che inizializza il client sul server, riceve come parametro il riferimento al server è vero ma l'argomento riceve un tipo "IClient" ovvero l'interfaccia che poi il client implementa, quindi non potrei chiamare altri metodi al di fuori da quelli remoti...e il metodo chiamato, lavora sul client
    Quindi il tuo client tecnicamente parlando è un "server remoto", ho capito bene? E' stato esportato/messo in ascolto da qualche parte?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    Nelle applicazioni RMI parlare di server e client è un po' estroverso. Io li ho definiti client e server poichè il server gestisce tanti client (tanti canali). Il server gestisce tanti canali. Ma i clients a loro volta sono sempre classi che implementano un'interfaccia "remote" e di conseguenza hanno dei metodi che vengono invocati dal loro gestore: il server (che diventa in questo caso un client per i canali che gestisce)

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    up

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da foralobo
    Nelle applicazioni RMI parlare di server e client è un po' estroverso. Io li ho definiti client e server poichè il server gestisce tanti client (tanti canali). Il server gestisce tanti canali. Ma i clients a loro volta sono sempre classi che implementano un'interfaccia "remote" e di conseguenza hanno dei metodi che vengono invocati dal loro gestore: il server (che diventa in questo caso un client per i canali che gestisce)
    Ok. Puoi far vedere l'interfaccia del "client"? E questo client estende qualcosa? Ad esempio, RemoteServer?

    Da quel che ricordo dal corso di programmazione di rete, ho il sospetto che il tuo client non sia ancora "esportato" e che venga esportato in automatico una volta ricevuto dal server (e quindi per questo motivo gira sulla macchina server e non su quella client).
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.