Domanda

In Java, quale sarebbe il modo migliore per avere una porta costantemente in ascolto aperta e continuare a inviare alla ricezione di un pacchetto.Al momento non sono particolarmente esperto con la programmazione di rete, quindi i tutorial che ho trovato in rete non sono particolarmente utili.

Avrebbe senso avere il socket in ascolto come serversocket ed eseguirlo in un thread separato sul socket che sto utilizzando per inviare i dati al server?

In una domanda vagamente correlata.Qualcuno sa se programmando semplicemente per Java, in netbeans e poi esportandolo per l'uso su un blackberry (usando un plugin) i socket funzionerebbero ancora?

È stato utile?

Soluzione

Se puoi permetterti il ​​threading, prova questo (tieni presente che ho tralasciato alcuni dettagli come la gestione delle eccezioni e il gioco carino con i thread).Potresti voler esaminare SocketChannels e/o prese/selettori asincroni NIO.Questo dovrebbe farti cominciare.

boolean finished = false;
int port = 10000;
ServerSocket server = new ServerSocket(port);

while (!finished) {
    // This will block until a connection is made
    Socket s = server.accept();
    // Spawn off some thread (or use a thread pool) to handle this socket
    // Server will continue to listen
}

Altri suggerimenti

Per quanto riguarda la connessione a un Blackberry, ciò è problematico poiché nella maggior parte dei casi il Blackberry non avrà un indirizzo IP pubblico e si troverà invece dietro un gateway WAP o un server punto di accesso del provider wireless.RIM fornisce Mobile Data Server (MDS) per aggirare questo problema e fornire dati "Push" che utilizzano la semantica ServerSocket sul Blackberry.L'MDS è disponibile con Blackberry Enterprise Server (BES) e Unite Server.

Una volta impostati, i dati possono essere inviati a una particolare unità tramite MDS utilizzando il protocollo HTTP.C'è un'eccellente descrizione del protocollo Push Qui con il codice sorgente LAMP.Il parametro PORTA=7874 in pushout.pl si collega alla presa del server Push del Blackberry Browser.Modificando questo parametro il carico utile può essere inviato a una porta arbitraria dove il tuo ServerSocket accetta connessioni.

Se il codice socket deve essere eseguito su un BlackBerry, non è possibile utilizzare socket Java standard.È necessario utilizzare l'API J2ME Connector.open per creare entrambi i tipi di socket (quelli che avviano connessioni dal BlackBerry e quelli che ascoltano connessioni/push sul BlackBerry).Dai un'occhiata agli esempi forniti con JDE di RIM.

Anche per questo bisognerebbe tornare alle origini.Consiglierei O'Reilly è eccellente Java in poche parole che include esempi di codice proprio per un caso del genere (disponibile in linea anche).Consulta il Capitolo 7 per una panoramica generale delle decisioni che vorresti prendere nella fase iniziale.

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