計画していることは問題ありません。電話でソケットをリッスンすることもできます。ピアツーピア通信が必要で、作成しているアプリケーションにもっと興味がある場合は、Java用のやや人気のあるP2PシステムであるJXTAを確認することをお勧めします。私はそれを知りません、そして私はそのパフォーマンスについていくつかの悪いことを聞いたことがあります、しかしあなたのアプリケーションにとってそれは適切かもしれません。
しかし、自分でロールするのもそれほど難しいことではありません。ただし、Java ME用のHTTPサーバー側ライブラリは見たことがないため、HTTPの使用は必要以上に手間がかかる可能性があります。おそらく、TCPソケットを介してカスタムプロトコルを実装するだけです。これは、既存のものと相互運用可能である必要がないように思われるためです。
Java MEでのソケット通信は、javax.microedition.io
パッケージに含まれているGeneric Connection Frameworkを介して行われ、クライアント側からはHTTP接続を使用するのとまったく同じです。
String url = "socket://192.168.xxx.xxx:12345";
SocketConnection conn = (SocketConnection) Connector.open(url);
そして、そこから接続用のInputStream
とを取得できます。または、バイナリデータを送信する場合もあります。OutputStream
DataInputStream
DataOutputStream
サーバー側では、
String url = "socket://:12345";
ServerSocketConnection sock = (ServerSocketConnection) Connector.open(url);
SocketConnection conn = (SocketConnection) sock.acceptAndOpen();
接続が確立されるacceptAndOpen
までブロックされるため、サーバーが他のことを行うことが重要な場合は、接続の受け入れを独自のスレッドに入れるようにしてください。
警告:数年前にこれを行っていたとき、ソケットでリッスンするだけではすべての電話のネットワークがオンにならないことがわかりました。そのため、サーバーがリッスンを開始しても、ソケットに接続できませんでした。ネットワーク上にありませんでした。私が回避した方法は、電話でWebブラウザーを開くことでしたが、ソケットを開くクライアントであれば十分なので、クライアント接続を自分で開こうとすることで、アプリケーションからそれを行うこともできます。
プッシュレジストリと呼ばれるものもあります。Midletを作成するときMIDlet-Push
に、JADファイルの属性を使用してアプリケーションを登録する可能性があるため、アプリケーションを実行する必要はありませんが、特定のポートで接続が試行されると、システムはアプリケーションをウェイクアップします。 。私はこれを実際に実装したことがないので、これ以上アドバイスすることはできません。