Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将Autobahn用于WebSocket通信,而不是从服务器接收_Android_Json_Websocket_Autobahn_Autobahnws - Fatal编程技术网

Android 将Autobahn用于WebSocket通信,而不是从服务器接收

Android 将Autobahn用于WebSocket通信,而不是从服务器接收,android,json,websocket,autobahn,autobahnws,Android,Json,Websocket,Autobahn,Autobahnws,我正在实现Autobahn,通过WebSocket连接到服务器。当我点击connect时,它会正确地打开套接字并记录该套接字已打开。然后我尝试向服务器发送一个简单的请求,即{“request”:“getSoftwareVersion”},当服务器收到此请求时,它应该以JSON对象的形式发回软件版本,问题是,onMessage从未被命中。这是我的密码: public class AutoBahnConnectRequest extends Request{ private static W

我正在实现Autobahn,通过WebSocket连接到服务器。当我点击connect时,它会正确地打开套接字并记录该套接字已打开。然后我尝试向服务器发送一个简单的请求,即
{“request”:“getSoftwareVersion”}
,当服务器收到此请求时,它应该以JSON对象的形式发回软件版本,问题是,onMessage从未被命中。这是我的密码:

public class AutoBahnConnectRequest extends Request{
    private static WebSocketConnection mAutoBahnConnection;
    private String mSocketHostAddress;
    private final static String m_TAG = AutoBahnConnectRequest.class.getSimpleName();

    public AutoBahnConnectRequest(String SocketHostAddress){
        this.mAutoBahnConnection = new WebSocketConnection();
        this.mSocketHostAddress = SocketHostAddress;
    }

    @Override
    protected Void doInBackground(Void... params){
        try {
            mAutoBahnConnection.connect(mSocketHostAddress, new WebSocketHandler(){

                @Override
                public void onOpen() {
                    String requestSoftware = "{\"request\":\"getSoftwareVersion\"}";
                    Log.i(m_TAG, requestSoftware);
                    Log.i(m_TAG, "Status: Connected to " + mSocketHostAddress);
                    mAutoBahnConnection.sendTextMessage(requestSoftware);
                }

                @Override
                public void onTextMessage(String payload) {
                    Log.i(m_TAG, "Got echo: " + payload);
                }

                @Override
                public void onClose(int code, String reason) {
                    Log.i(m_TAG, "Connection lost."+ reason);
                }
            });
        } catch (WebSocketException e) {
            Log.d(m_TAG, e.toString());
        }
        return null;
    }
}
这已通过类似这样的html客户端实现(而不是autobahn):

onMessage接收数据。有人能告诉我我是不是做错了什么吗


谢谢。

我已经解决了这方面的问题。WebSocket连接需要添加协议和选项。所以我改变了这个:

mAutoBahnConnection.connect(mSocketHostAddress, new WebSocketHandler(){

                @Override
                public void onOpen() {
                    String requestSoftware = "{\"request\":\"getSoftwareVersion\"}";
                    Log.i(m_TAG, requestSoftware);
                    Log.i(m_TAG, "Status: Connected to " + mSocketHostAddress);
                    mAutoBahnConnection.sendTextMessage(requestSoftware);
                }

                @Override
                public void onTextMessage(String payload) {
                    Log.i(m_TAG, "Got echo: " + payload);
                }

                @Override
                public void onClose(int code, String reason) {
                    Log.i(m_TAG, "Connection lost."+ reason);
                }
            });
        } catch (WebSocketException e) {
            Log.d(m_TAG, e.toString());
        }
为此:

 mAutoBahnConnection.connect(mSocketHostAddress,new String[]{"this is my protocol"} ,new WebSocketHandler(){

                @Override
                public void onOpen() {
                    String requestSoftware = "{\"request\":\"getSoftwareVersion\"}";
                    Log.i(m_TAG, requestSoftware);
                    Log.i(m_TAG, "Status: Connected to " + mSocketHostAddress);
                    mAutoBahnConnection.sendTextMessage(requestSoftware);
                }

                @Override
                public void onTextMessage(String payload) {
                    Log.i(m_TAG, "Got echo: " + payload);
                }

                @Override
                public void onRawTextMessage(byte[] payload) {
                    try {
                        rawText = new String(payload, "UTF-8");
                        Log.i(m_TAG, "ON RAW TEXT");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onBinaryMessage(byte[] payload) {
                    Log.i(m_TAG, "ON BINARY MESSAGE");
                }


                @Override
                public void onClose(int code, String reason) {
                    Log.i(m_TAG, "Connection lost."+ reason);
                }
            }, options);
        } catch (WebSocketException e) {
            Log.d(m_TAG, e.toString());
        }
 mAutoBahnConnection.connect(mSocketHostAddress,new String[]{"this is my protocol"} ,new WebSocketHandler(){

                @Override
                public void onOpen() {
                    String requestSoftware = "{\"request\":\"getSoftwareVersion\"}";
                    Log.i(m_TAG, requestSoftware);
                    Log.i(m_TAG, "Status: Connected to " + mSocketHostAddress);
                    mAutoBahnConnection.sendTextMessage(requestSoftware);
                }

                @Override
                public void onTextMessage(String payload) {
                    Log.i(m_TAG, "Got echo: " + payload);
                }

                @Override
                public void onRawTextMessage(byte[] payload) {
                    try {
                        rawText = new String(payload, "UTF-8");
                        Log.i(m_TAG, "ON RAW TEXT");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onBinaryMessage(byte[] payload) {
                    Log.i(m_TAG, "ON BINARY MESSAGE");
                }


                @Override
                public void onClose(int code, String reason) {
                    Log.i(m_TAG, "Connection lost."+ reason);
                }
            }, options);
        } catch (WebSocketException e) {
            Log.d(m_TAG, e.toString());
        }