2008-09-05 15 views
4

In Java, was wäre der beste Weg, einen ständig zuhörenden Port offen zu haben und trotzdem nach Empfang eines Pakets zu senden. Ich bin im Moment nicht besonders geschickt mit Netzwerk-Programmierung, so dass die Tutorials, die ich im Internet gefunden habe, nicht besonders hilfreich sind.Sockets und Prozesse in Java

Wäre es sinnvoll, den abhörenden Socket als Server-Socket zu verwenden und ihn in einem separaten Thread zu dem Socket auszuführen, den ich zum Senden von Daten an den Server verwende?

In einer lose verwandten Frage. Wer weiß, ob Programmierung für Java, in Netbeans dann für den Einsatz auf einem Blackberry (mit einem Plugin) die Sockets noch funktionieren würde?

Antwort

12

Wenn Sie sich das Threading leisten können, versuchen Sie es (denken Sie daran, dass ich einige Details weggelassen habe, wie etwa die Ausnahmebehandlung und das Spielen mit Threads). Vielleicht möchten Sie in SocketChannels und/oder NIO asynchronen Sockets/Selektoren suchen. Dies sollte Ihnen den Einstieg erleichtern.

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 
} 
+0

+1, obwohl für einen Anfänger das ist genug, er sollte ** nicht ** versuchen, in NIO zu suchen – flybywire

1

Ich würde für dieses auch zu den Grundlagen zurückkehren müssen. Ich würde O'Reilly ausgezeichnete Java in einer Nussschale empfehlen, die Codebeispiele für gerade solch einen Fall enthält (verfügbar online ebenso). In Kapitel 7 erhalten Sie einen guten Überblick über die Entscheidungen, die Sie frühzeitig treffen möchten.

2

Für die Verbindung mit einem Blackberry ist dies problematisch, da der Blackberry in den meisten Fällen keine öffentliche IP-Adresse hat und stattdessen hinter einem WAP-Gateway- oder Wireless-Provider-Access-Point-Server liegt. RIM stellt den Mobile Data Server (MDS) zur Verfügung, um dies zu umgehen und "Push" -Daten bereitzustellen, die die ServerSocket-Semantik auf dem Blackberry verwenden. Der MDS ist mit dem BlackBerry Enterprise Server (BES) und dem Unite Server verfügbar.

Nach dem Einrichten können Daten über das MDS mit dem HTTP-Protokoll an eine bestimmte Einheit gesendet werden. Es gibt eine ausgezeichnete Beschreibung des Push-Protokolls here mit LAMP-Quellcode. Der Parameter PORT = 7874 in pushout.pl verbindet sich mit dem Blackberry Browser Push Server Socket. Durch Ändern dieses Parameters kann die Payload an einen beliebigen Port gesendet werden, an dem Ihr eigener ServerSocket Verbindungen akzeptiert.

2

Wenn Ihr Socket-Code auf einem BlackBerry ausgeführt werden muss, können Sie keine Standard-Java-Sockets verwenden. Sie müssen die J2ME Connector.open-API zum Erstellen beider Arten von Sockets verwenden (diejenigen, die Verbindungen vom BlackBerry initiieren, und solche, die auf Verbindungen/Push-Vorgänge auf dem BlackBerry warten). Sehen Sie sich die Beispiele an, die mit RIMs JDE geliefert werden.