1

Wifiアクセスポイントに4台の電話を接続していて、Wifiアクセスポイントを含むこれらすべてのMAC/IPを知っています。

これらの各電話間の通信、一種のピアツーピア通信を実装する必要があります。ソケットの使用を考えていましたが、各電話にServerSocketとSocketを実装する必要があります。これで問題ありませんか?

これらの電話のIPはプライベート範囲192.168....にあるので、 http://192.168.xx.xx/portのようなものを使用して、 httpを使用して任意の電話に連絡できますか?これを実装するためにどのような種類のクラスを使用できますか、または直接使用できるすぐに使用できるフレームワークはありますか?

4

1 に答える 1

2

計画していることは問題ありません。電話でソケットをリッスンすることもできます。ピアツーピア通信が必要で、作成しているアプリケーションにもっと興味がある場合は、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とを取得できます。または、バイナリデータを送信する場合もあります。OutputStreamDataInputStreamDataOutputStream

サーバー側では、

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

接続が確立されるacceptAndOpenまでブロックされるため、サーバーが他のことを行うことが重要な場合は、接続の受け入れを独自のスレッドに入れるようにしてください。

警告:数年前にこれを行っていたとき、ソケットでリッスンするだけではすべての電話のネットワークがオンにならないことがわかりました。そのため、サーバーがリッスンを開始しても、ソケットに接続できませんでした。ネットワーク上にありませんでした。私が回避した方法は、電話でWebブラウザーを開くことでしたが、ソケットを開くクライアントであれば十分なので、クライアント接続を自分で開こうとすることで、アプリケーションからそれを行うこともできます。

プッシュレジストリと呼ばれるものもあります。Midletを作成するときMIDlet-Pushに、JADファイルの属性を使用してアプリケーションを登録する可能性があるため、アプリケーションを実行する必要はありませんが、特定のポートで接続が試行されると、システムはアプリケーションをウェイクアップします。 。私はこれを実際に実装したことがないので、これ以上アドバイスすることはできません。

于 2010-01-07T20:38:19.293 に答える