0

node.js / socket.ioサーバーがあり、WebSocketを介して通信するAndroidアプリを作成したいと思いました。ライブラリを見つけました:https ://github.com/koush/android-websockets しかし、サンプルコード(Socket.IOの使用法)を使用しようとすると:

SocketIOClient client = new SocketIOClient(URI.create("ws://myIP:port"), new SocketIOClient.Handler() {
    String TAG = "WebSocket Handler";
    @Override
    public void onConnect() {
            Log.d(TAG, "Connected!");
    }

    @Override
    public void on(String event, JSONArray arguments) {
        Log.d(TAG, String.format("Got event %s: %s", event, arguments.toString()));
    }

    @Override
    public void onDisconnect(int code, String reason) {
        Log.d(TAG, String.format("Disconnected! Code: %d Reason: %s", code, reason));
    }

    @Override
    public void onError(Exception error) {
        Log.e(TAG, "Error!", error);
    }
});

client.connect();

(IPとポート、またはurl:portを使用)次のエラーが発生します。

Error!
05-19 18:03:56.065: E/WebSocket Handler(629): java.lang.IllegalStateException: Scheme 'ws' not registered.
05-19 18:03:56.065: E/WebSocket Handler(629):   at org.apache.http.conn.scheme.SchemeRegistry.getScheme(SchemeRegistry.java:80)
05-19 18:03:56.065: E/WebSocket Handler(629):   at org.apache.http.impl.conn.DefaultHttpRoutePlanner.determineRoute(DefaultHttpRoutePlanner.java:107)
05-19 18:03:56.065: E/WebSocket Handler(629):   at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:565)
05-19 18:03:56.065: E/WebSocket Handler(629):   at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292)
05-19 18:03:56.065: E/WebSocket Handler(629):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-19 18:03:56.065: E/WebSocket Handler(629):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-19 18:03:56.065: E/WebSocket Handler(629):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-19 18:03:56.065: E/WebSocket Handler(629):   at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:243)
05-19 18:03:56.065: E/WebSocket Handler(629):   at com.codebutler.android_websockets.SocketIOClient.downloadUriAsString(SocketIOClient.java:48)
05-19 18:03:56.065: E/WebSocket Handler(629):   at com.codebutler.android_websockets.SocketIOClient.access$1(SocketIOClient.java:45)
05-19 18:03:56.065: E/WebSocket Handler(629):   at com.codebutler.android_websockets.SocketIOClient$3.run(SocketIOClient.java:200)

解決策が見つかりません

4

2 に答える 2

3

https://github.com/koush/android-websocketsの readme ファイルのサンプル コードは、少し誤解を招きます。に変更ws://するhttp://と、正しく動作するはずです。

また、何らかの理由でエミュレータで正しく動作していませんでした。デバイスで試してみたところ、上記の変更を加えた後に動作するようです。

于 2012-10-30T05:11:10.127 に答える
1

node.js/socket.io サーバーが http リスナーでセットアップされているかどうか知っていますか? Android から node.js/socket.io に接続しましたが、残念ながらサーバーをセットアップしていないため、詳細を提供できません。私たちの node.js ファイルは、クライアントが ws ではなく http 経由で接続できるようにする http リスナーを使用して設定されていることを知っています。

サーバーが http リスナーを使用してセットアップされている場合は、私が使用した別の android socket.io ライブラリ ( https://github.com/Gotox/socket.io-java-client ) を試すことができ、非常にうまく機能します。

于 2012-05-20T01:17:27.807 に答える