繁体   English   中英

使用Websocket Android客户端异步接收文本消息[2]

[英]Receive text message asynchronously with Websocket Android Client [2]

我尝试从Websocket服务器(使用ASP.NET服务器构建)向Android客户端异步接收文本消息。 我尝试了几次Android websocket库(高速公路,android-websocket,移动websocket,java-websocket,...),但是android客户端仅在发送消息之前收到文本消息。 我会从服务器(或另一个客户端)接收消息,而无需在之前发送文本消息。

例如,您知道任何解决方案或聊天示例应用程序吗?

非常感谢 !

(这是第二篇文章。第一篇在这里

这是我与高速公路库一起使用的代码:

private final WebSocketConnection mConnection = new WebSocketConnection();

private void start() {

   final String wsuri = "ws://localhost:9000";

   try {
      mConnection.connect(wsuri, new WebSocketHandler() {

         @Override
         public void onOpen() {
            mConnection.sendTextMessage("Hello, world!");
         }

         @Override
         public void onTextMessage(String payload) {
            // Here, I received message only if I have used WebSocketConnection.sendTextMessage(String) function
         }

         @Override
         public void onClose(int code, String reason) {

         }
      });
   } catch (WebSocketException e) {

      Log.d(TAG, e.toString());
   }
}

从两周开始,我也开始在Android上使用websocket ...就我而言,我想使用WSS,因此,安全的websocket和具有自签名证书的...所有尝试中,唯一可以无缝运行的库是nv- websocket-client,但这仅用于安全的websocket情况。

无论如何,如果您觉得有用,我会将代码放在这里,为了保护隐私,我删除了一些详细信息,如果您需要简单的连接,则可以跳过SSL部分。

    public class SocketHandler
    {
    private final static String LOGTAG = "SocketHandler";
    private int TIMEOUT = 5000;
    private MainActivity main;
    private SocketConnector socketConnector;

    public SocketHandler(MainActivity main) {
        this.main = main;
    }

    public void connect() {
        socketConnector = new SocketConnector();
        socketConnector.execute();
    }

    public void disconnect() {
        socketConnector.ws.disconnect();
    }

    private class SocketConnector extends AsyncTask<Void, Void, Void> {

        WebSocket ws;

        @Override
        protected Void doInBackground(Void... params) {
            try {   
                SSLContext context = NaiveSSLContext.getInstance("TLS");
                WebSocketFactory wsf = new WebSocketFactory();
                wsf.setConnectionTimeout(TIMEOUT);
                wsf.setSSLContext(context);
                ws = wsf.createSocket("wss://" + ADDRESS);
                ws.addListener(new WSListener());
                ws.addExtension(WebSocketExtension.parse(WebSocketExtension.PERMESSAGE_DEFLATE));
                ws.connect();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }       
    }

    private class WSListener extends WebSocketAdapter {

        @Override
        public void onConnected(WebSocket websocket, Map<String, List<String>> headers) {
            websocket.sendText("Hello World");
        }

        @Override
        public void onTextMessage(WebSocket websocket, String message) {

        }

        @Override
        public void onError(WebSocket websocket, WebSocketException cause) {

        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM