Autore Topic: Applicazione Client (Android) Server (JAVA)  (Letto 4833 volte)

Offline LS05

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Applicazione Client (Android) Server (JAVA)
« il: 02 Agosto 2012, 14:52:24 CEST »
0
Salve ragazzi,
Devo realizzare un sistema in cui c'è un server java e un client android. Principalmente le funzionalità più importanti sono:
- Il server effettua una richiesta a tutti i dispositivi android che "conosce" e questi inviano al server un file di testo.
- I client android di tanto in tanto inviano dei dati in formato stringa al server. questi dati rappresentano le informazioni relative all'accelerometro e altre info come nome cognome eccetera.
Se volete avere informazioni molto più dettagliate ecco il link: http://bit.ly/QziSB4
Ora la mia domanda è come posso realizzare tutto ciò? (ovviamente mi riferisco solo alla comunicazione del server con gli smartphones e non a tutto il sistema  :D)
Mi hanno consigliato di utilizzare il protocollo HTTP piuttosto che le Socket...voi che mi consigliate?

P.S.: Si assume che gli smartphones siano collegati alla rete cellulare (3G). Sugli smartphone non c'è nessuna specifica sul modello non so se è un problema (sono nuovo nello sviluppo android)

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #1 il: 02 Agosto 2012, 15:02:12 CEST »
0
Penso che questo faccia al caso tuo.

Google Cloud Messaging for Android | Android Developers

 ;-)

Offline LS05

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #2 il: 02 Agosto 2012, 15:15:21 CEST »
0
Ma mi stavi spiando? Allora è vero che con android si può fare tutto!  :-o Lo stavo appena guardando  :D ...l'hai mai usato?   O:-)

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #3 il: 02 Agosto 2012, 15:26:26 CEST »
0
No purtroppo non l'ho mai usato e non ho poteri sovrannaturali... però suppongo si trovino svariati esempi nella documentazione ufficiale e altrove.  ;-)

Offline LS05

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #4 il: 02 Agosto 2012, 15:45:09 CEST »
0
Ma non credo vada bene nel caso di scambio di files..... :-(

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #5 il: 02 Agosto 2012, 16:43:44 CEST »
+1
Se ho capito bene il tuo problema tu vorresti dire a N device di inviare dei files.

Ora... il problema è dal server al device nel senso che il device mobile in quanto tale è su rete 3g poi aggancia la wifi di casa poi di nuovo 3g, etc. Non è che tu puoi sapere a prescindere quale IP ha il device mobile. Il server invece di solito non ha questi problemi perchè è sempre nello stesso posto. Ma con google cloud messaging in teoria funziona anche se l'IP del server cambia. :-P

Se ho capito bene la cosa dovrebbe funzionare così:

- tu invii dal tuo server un messaggio fino a 4kb a uno o più device "registrati". puoi benissimo inviare l'indirizzo del server. (http://1.2.3.4)
- ricevuta la richiesta dal server, il device si "attiva" e cerca di mandare un file al server, suppongo attraverso un servizio ad hoc (che so, downloader.php). penso tu possa trovare documentazione per servizi del genere in php, asp e chi più ne ha più ne metta.

O mi sono perso per strada qualcosa?

Offline LS05

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #6 il: 02 Agosto 2012, 18:32:54 CEST »
0
Se ho capito bene il tuo problema tu vorresti dire a N device di inviare dei files.

Ora... il problema è dal server al device nel senso che il device mobile in quanto tale è su rete 3g poi aggancia la wifi di casa poi di nuovo 3g, etc. Non è che tu puoi sapere a prescindere quale IP ha il device mobile. Il server invece di solito non ha questi problemi perchè è sempre nello stesso posto. Ma con google cloud messaging in teoria funziona anche se l'IP del server cambia. :-P

Se ho capito bene la cosa dovrebbe funzionare così:

- tu invii dal tuo server un messaggio fino a 4kb a uno o più device "registrati". puoi benissimo inviare l'indirizzo del server. (http://1.2.3.4)

- ricevuta la richiesta dal server, il device si "attiva" e cerca di mandare un file al server, suppongo attraverso un servizio ad hoc (che so, downloader.php). penso tu possa trovare documentazione per servizi del genere in php, asp e chi più ne ha più ne metta.

O mi sono perso per strada qualcosa?
Quello in grassetto è ok. non ho capito che intendi quando nomini il php. Il mio dubbio è dovuto al fatto che non so se la libreria di google sia adatta all'invio di file.
Perchè il server una volta che effettua la richiesta, gli N device devono inviare un file e non un messaggio. Ecco perchè non so se utilizzare la libreria di google o una connessione via socket e quindi poi utilizzare i corrispondenti inputstream e outputstream che vengono resi disponibili.

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #7 il: 02 Agosto 2012, 18:51:15 CEST »
0
Per come la intendo io la libreria di google serve solo per comunicare il "risveglio" al device.

Tu dici che vuoi che il server richieda da remoto un file di test ad un device. Il problema è che tu non sai l'IP del telefono perchè cambia (3g, wifi, etc).

Quindi a meno che tu non voglia che il telefono autonomamente ti invii i files (come dici tu attraverso un socket per esempio) hai due soluzioni.

1- fai in modo che il device faccia un polling sul server ogni tanto e se il server risponde "invia" allora mandi il messaggio.
2- usi il google cloud messaging per dire al tuo telefono che deve inviarti qualcosa.

Il problema del numero uno, oltre al numero spropositato di richieste che fai in un giorno è che funziona fino a quando l'IP del server è fisso. Quando cambia non funziona.

Ricapitolando io non dico di usare google cloud messaging per trasferire il file, dico solo di usarlo per inviare ad un device l'indirizzo del server con un comando.

Tipo un "comando" xml:
Codice (XML): [Seleziona]
<location>1.2.3.4</location>
<port>1234</port>
<command>sendfile</command>

Così il tuo device riceve questo e invia il file a http://1.2.3.4 sulla porta 1234, poi per l'invio del file puoi usare socket, php, mysql, ftp o quello che ti pare.

Il vantaggio di una soluzione del genere è che non solo puoi avere più comandi ma con versioni successive puoi aggiungere nuove features.

 :-)

Edito nel caso mi fossi spiegato male: hai ragione quando dici che google cloud messaging non va bene per inviare file, infatti in questo caso il suo scopo è solo quello di dire al tuo device che deve inviare i files ad un certo indirizzo. Una volta fatto questo tu non passi da google cloud messaging, il device ed il server comunicano direttamente.
« Ultima modifica: 02 Agosto 2012, 18:53:23 CEST da undead »

Offline LS05

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #8 il: 02 Agosto 2012, 19:03:54 CEST »
0
Anzitutto grazie per l'aiuto che mi stai dando.  ;-)
Forse usare GCM come dici tu mi sembra la cosa migliore. In ogni caso il progetto che sto realizzando è a scopo didattico quindi magari cose tipo il passaggio da 3G a wifi non sono da considerare come anche il numero di richieste. Infatti devi immaginare che c'è un admin sul server che ad un certo punto della giornata effettua la richiesta a tutti i devi di questo file.
L'altra cosa che non ti ho detto è che i device di tanto in tanto (a intervalli di tempo stabiliti) inviano al server un file con le informazioni relative all'accelerometro concatenate a un timestamp, ma penso che sia la stessa cosa (tranne il fatto che in questo caso l'invio dei file dai device al server è automatico)

P.S.
qui c'è una presentazione su GCM
        Google I/O 2012 - Google Cloud Messaging for Android
      - YouTube
 
(colui che parla è anche italiano stranamente!  ;-))

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #9 il: 02 Agosto 2012, 19:15:49 CEST »
0
Figurati.  :-)

Se non sai l'IP di tutti i target device puoi provare a mandare una richiesta dal server.
Però te lo sconsiglio per alcuni motivi, primo tra tutti il fatto che anche se sei sotto rete wireless non è detto che tu conosca l'ip del device, banalmente è possibile che la configurazione preveda che l'ip sia assegnato dal router.

Per semplicità assumiamo che tu conosca gli indirizzi e che non ci siano problemi (cioè che ogni device abbia ip fisso e che non vi siano collisioni, cioè che nessun device sia configurato con lo stesso IP locale). Il problema è che non hai un "server" sul tuo telefono quindi dovresti mandare un messaggio dal server al device, scriverti un servizio su android, "ascoltare" la porta tal dei tali, etc.

Ad occhio e croce non mi sembra banale.

Visto che sei in ambiente controllato ed è a scopo didattico se vuoi evitare google cloud messaging fai prima a fare così: scrivi un servizio che chiede al server se deve fare qualcosa ogni 30 secondi. Invii un semplice messaggio e se la risposta è invia file tu invii il file, altrimenti non fai nulla e riprovi tra 30 secondi.

Ovviamente in ambiente controllato sai che il server è sempre sullo stesso indirizzo IP e se ti consuma più traffico e batteria è lo stesso.

 ;-)

Offline LS05

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #10 il: 02 Agosto 2012, 19:26:49 CEST »
0
Comunque il server è garantito che è sempre sullo stesso IP forse intendevi il singolo device. in ogni caso mi consigli di utilizzare quindi le socket? e quindi fare tutto come se fosse una normale connessione client server tra applicazioni java? (magari usare un approccio misto e includere anche GCM)
« Ultima modifica: 02 Agosto 2012, 19:42:45 CEST da LS05 »

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #11 il: 02 Agosto 2012, 19:44:52 CEST »
0
Si il server di solito ha ip fisso... ma facevo un discorso teorico.

Posso installarmi un server HTTP come apache anche sul PC che ho in salotto però a livello di rete locale se non configuro l'ip statico mi cambia ogni volta. Per l'accesso dall'esterno se non ti affidi a servizi tipo dyndns.org (che adesso è a pagamento tra l'altro) ogni volta che riaccendi il router se hai una adsl classica ti cambia l'ip.

Per me i socket vanno benissimo.  ;-)

EDIT: google cloud messaging è necessario solo se non conosci gli IP dei device o vuoi evitare di fare richeste continue dal device al server. Nel primo messaggio parlavi di rete 3g, in quel caso la logica è lavorare in push (appunto con google cloud)

Offline LS05

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:Applicazione Client (Android) Server (JAVA)
« Risposta #12 il: 02 Agosto 2012, 20:06:35 CEST »
0
Si il requisito della rete cellulare rimane. questi devices che sono in comunicazione con il server sono in diversi luoghi non a caso al server verranno inviate informazioni sulla loro posizione.  ;-)