Domanda

Ho 4 telefoni collegati a un punto di accesso WiFi e so che il MAC / IP di tutti questi tra cui il punto di accesso WiFi.

Ho bisogno di implementare la comunicazione tra ciascuno di questi telefoni, una sorta di peer to peer di comunicazione, stavo pensando di usare i socket ma poi ogni telefono dovrà implementare un ServerSocket e Socket su ciascuno dei cellulari è questo bene?

L'IP di questi telefoni sarebbe nella gamma privato 192.168 .... così ho potuto usare qualcosa come http: //192.168.xx.xx/port e contattare qualsiasi telefono utilizzando http? Che tipo di classi potrei usare per implementare questo, o c'è un quadro pronto che potrei usare direttamente?

È stato utile?

Soluzione

Che cosa si sta progettando è bene: è possibile avere i telefoni in ascolto su socket troppo. Se si desidera solo avere comunicazione peer-to-peer e sono più interessati a l'applicazione che si sta scrivendo, si potrebbe desiderare di dare un'occhiata a JXTA , che è un sistema P2P po 'popolare per Java. Non lo so, e ho sentito alcune cose cattive sulle sue prestazioni, ma per la vostra applicazione potrebbe essere adatto.

Ma non è molto difficile da rotolare il proprio, sia. Tuttavia, non ho visto le librerie lato server HTTP per Java ME, in modo da utilizzare HTTP potrebbe essere più lavoro di quanto necessario. Io probabilmente solo implementare un protocollo personalizzato tramite socket TCP, dal momento che non sembra si avrebbe bisogno di essere interoperabili con qualsiasi cosa già esistenti.

Comunicazione socket in Java ME è attraverso il Generic Connection Framework, che si trova nel pacchetto javax.microedition.io, e dal lato client è esattamente come l'utilizzo di connessioni HTTP, vale a dire, qualcosa come

String url = "socket://192.168.xxx.xxx:12345";
SocketConnection conn = (SocketConnection) Connector.open(url);

E allora si può ottenere un InputStream e OutputStream per la connessione a questo, o DataInputStream e DataOutputStream se si desidera inviare i dati binari.

Sul lato server si farebbe

String url = "socket://:12345";
ServerSocketConnection sock = (ServerSocketConnection) Connector.open(url);
SocketConnection conn = (SocketConnection) sock.acceptAndOpen();

I blocchi acceptAndOpen finché viene effettuata una connessione, quindi se è importante per il server di fare qualcosa di diverso, assicurarsi di mettere l'accettazione di connessione nel proprio thread.

Un avvertimento: quando stavo facendo questo a pochi anni fa, ho scoperto che solo l'ascolto su un socket non si accende la rete su tutti i telefoni, quindi, anche se il server ha iniziato ad ascoltare, non è stato possibile per la connessione a perché non era in rete. Il modo in cui ho lavorato intorno ad esso è stato quello di aprire il browser Web sul telefono, ma qualsiasi client di aprire un socket è sufficiente, così si potrebbe anche farlo dall'applicazione, cercando di aprire una connessione client stessi.

C'è anche una cosa chiamata il Registro Push. Quando si crea il Midlet, v'è la possibilità di registrare l'applicazione con un attributo MIDlet-Push nel file JAD, in modo che non si deve avere la vostra applicazione in esecuzione ma il sistema sarà svegliarlo quando una connessione viene tentata su un certo porta. Non ho mai effettivamente attuato questo, quindi non posso dare più consigli su di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top