2017-01-04 5 views
1

Autobahn WebSocketsを使用してAndroidクライアントに接続しようとするPayaraサーバーにJava EEエンドポイントを設定しました。私のようなのWebSocketを登録「接続が拒否されました」Autobahn Android to Java EEエンドポイント

public class CommunicationSocket extends Endpoint { 

    @Override 
    public void onOpen(Session aSession, EndpointConfig aConfig) { 
     aSession.addMessageHandler(new MessageHandler.Whole<byte[]>() { 
     @Override 
     public void onMessage(byte[] aMessage) { 
      // Do something fun 
     } 
     }); 
    } 
} 

public class RegisterSocket implements ServerApplicationConfig { 

    @Override 
    public Set<ServerEndpointConfig> getEndpointConfigs(
      Set<Class<? extends Endpoint>> aEndpointClasses) { 
     Set<ServerEndpointConfig> result = new HashSet<>(); 
     for (Class endpointClass : aEndpointClasses) { 
      if (endpointClass.equals(CommunicationSocket.class)) { 
      ServerEndpointConfig sec 
         = ServerEndpointConfig.Builder.create(endpointClass, 
          "/WebSocket").build(); 
      result.add(sec); 
      } 
     } 
     return result; 
    } 

    @Override 
    public Set<Class<?>> getAnnotatedEndpointClasses(
      Set<Class<?>> aScanned) { 
     return Collections.emptySet(); 
    } 

} 

のWebSocketは今ATT WSを達することができます:// localhostの

私のWebSocketエンドポイントサーバー上:私は次のセットアップを持っています:46588 /サーバー/ WebSocket。私はそれがクロムで次のJavaScriptで動作することを確認しました:メッセージとの接続を確立できずに、私は私のアンドロイドクライアント使用してアウトバーンで接続しようとすると

function WebSocketTest() { 
    if ("WebSocket" in window) { 
     ws = new WebSocket("ws://localhost:46588/Server/WebSocket"); 

     ws.onopen = function() { 
     ws.send("Message to send"); 
      alert("Message is sent..."); 
     }; 

     ws.onmessage = function (evt) { 
       var received_msg = evt.data; 
       alert("Message is received... \n" + received_msg); 
     }; 

    } else { 
     // The browser doesn't support WebSocket 
     alert("WebSocket NOT supported by your Browser!"); 
    } 
} 

しかし、ソケットが閉じ、「接続が拒否されました"私は(mSocketはActivityクラスのフィールドである)を接続するためのonCreateに次のコードを使用します。

WebSocketHandler messageHandler = new WebSocketHandler() { 
    @Override 
    public void onOpen() { 
     System.out.println("Connected..."); 
    } 

    @Override 
    public void onClose(int code, String reason) { 
     System.out.println("Socket closing: " + reason); 
     mSocket = null; 
    } 

    @Override 
    public void onTextMessage(String payload) { 
     System.out.println("Received: " + payload); 
    } 

    @Override 
    public void onBinaryMessage(byte[] payload) { 
     System.out.println("Message received: " + payload);   
    } 
}; 

mSocket = new WebSocketConnection(); 
try { 
    String address = "ws://localhost:46588/Server/WebSocket"; 
    mSocket.connect(address, messageHandler); 
} catch (WebSocketException e) { 
    System.out.println("Could not connect to WebSocket: " 
      + e.getMessage()); 
    mSocket = null; 
} 

私がように私は私のマニフェストのインターネットアクセス権を持っている:

<uses-permission android:name="android.permission.INTERNET"> 
</uses-permission> 

は私のコードでは何がありますまたはアプローチが間違っている?接続が拒否された理由を明らかにするために、接続のイベントを記録/捕捉することは可能ですか(ハンドシェイクかどうか)

答えて

0

質問を投稿する準備が整い次第、私は最後に尋ねました:lo and behold、localhostはエミュレータを実行しているマシンのローカルホストではありません(エミュレートされたデバイスのlocalhostだと思います)。だから、使用:代わりに

localhost:[port] 

10.0.2.2:[port] 

、それはエミュレータ上の罰金になります

を(実際のデバイス上で動作している場合は変更することを忘れないでください)
関連する問題