2008-09-05 11 views
4

Javaでは、常にリスニングポートを開いて、パケットの受信時に送信するのが最善の方法でしょう。私は現時点でネットワークプログラミングに精通していないので、ネット上で見つけたチュートリアルは特に役に立ちません。Javaのソケットとプロセス

リスニングソケットをserversocketとして持ち、それをサーバーにデータを送信するために使用しているソケットとは別のスレッドで実行するのは意味がありますか?

ゆるやかに関連する質問です。誰もが、netbeansでJava用にプログラミングすれば、プラグインを使用してブラックベリーで使用するためにエクスポートしても、ソケットはまだ動作するでしょうか?

答えて

12

もしあなたがスレッドを買う余裕があれば、これを試してみてください(私は例外処理のようないくつかの詳細を残しておき、スレッドでうまくやっています)。 SocketChannelsおよび/またはNIO非同期ソケット/セレクタを調べることができます。これはあなたを始めるはずです。

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初心者の方でも十分ですが、彼はNIOを見てみるべきではありません** – flybywire

1

私はこのことについても基本に戻る必要があります。私はO'Reillyの優秀なJavaを簡潔にお勧めしたいと思いますこのような場合のコード例が含まれています(onlineもあります)。早い段階で決定したいと思っている決定については、第7章を参照してください。

2

ブラックベリーに接続する場合、これは問題があります。ほとんどの場合、ブラックベリーはパブリックIPアドレスを持たず、代わりにWAPゲートウェイまたはワイヤレスプロバイダーアクセスポイントサーバーの背後にあるからです。 RIMはこれを回避し、Blackberry上でServerSocketセマンティクスを使用する「プッシュ」データを提供するモバイルデータサーバー(MDS)を提供しています。 MDSは、Blackberry Enterprise Server(BES)およびUnite Serverで使用できます。

設定したデータは、HTTPプロトコルを使用してMDS経由で特定のユニットに送信できます。プッシュプロトコルhereとLAMPソースコードの優れた説明があります。 pushout.plのパラメータPORT = 7874は、Blackberryブラウザプッシュサーバーソケットに接続します。このパラメータを変更することで、ペイロードは自分のServerSocketが接続を受け付けている任意のポートに送ることができます。

2

ソケットコードをBlackBerryで実行する必要がある場合は、標準のJavaソケットを使用できません。 J2ME Con​​nector.open APIを使用して、両方のタイプのソケット(BlackBerryからの接続を開始するソケットと、BlackBerryの接続/プッシュを待機するソケット)を作成する必要があります。 RIMのJDEに付属のサンプルを見てください。