Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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
Java 使用Websocket Android客户端异步接收文本消息[2]_Java_Android_Asynchronous_Websocket_Push - Fatal编程技术网

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

Java 使用Websocket Android客户端异步接收文本消息[2],java,android,asynchronous,websocket,push,Java,Android,Asynchronous,Websocket,Push,我尝试从websocket服务器(使用ASP.NET服务器构建)到Android客户端异步接收文本消息。我尝试了几个Android websocket库(autobahn、Android websocket、mobile websocket、java websocket等),但Android客户端只在发送消息之后才接收文本消息。我希望从服务器(或另一个客户端)接收消息,而不必在之前发送文本消息 例如,您知道任何解决方案或聊天示例应用程序吗 非常感谢 (这是第二篇文章,第一篇是) 下面是我在高速公

我尝试从websocket服务器(使用ASP.NET服务器构建)到Android客户端异步接收文本消息。我尝试了几个Android websocket库(autobahn、Android websocket、mobile 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和自签名证书。。。在我所有的尝试中,唯一能够无缝工作的库是,但这只是针对安全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) {

        }
    }
}
公共类SocketHandler
{
私有最终静态字符串LOGTAG=“SocketHandler”;
私有int超时=5000;
私人活动主体;
专用插座连接器插座连接器;
公共SocketHandler(主活动主活动){
this.main=main;
}
公共void connect(){
socketConnector=新的socketConnector();
socketConnector.execute();
}
公共空间断开连接(){
ws.disconnect();
}
私有类SocketConnector扩展异步任务{
WebSocket ws;
@凌驾
受保护的Void doInBackground(Void…参数){
试试{
SSLContext context=NaiveSSLContext.getInstance(“TLS”);
WebSocketFactory wsf=新的WebSocketFactory();
setConnectionTimeout(超时);
wsf.setSSLContext(上下文);
ws=wsf.createSocket(“wss://”+地址);
addListener(新的WSListener());
ws.addExtension(WebSocketExtension.parse(WebSocketExtension.PERMESSAGE_DEFLATE));
ws.connect();
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}       
}
私有类WSListener扩展了WebSocketAdapter{
@凌驾
未连接的公共空间(WebSocket WebSocket,地图标题){
sendText(“你好世界”);
}
@凌驾
公共void onTextMessage(WebSocket WebSocket,字符串消息){
}
@凌驾
public void onError(WebSocket WebSocket,WebSocket异常原因){
}
}
}

请指定更多详细信息:源代码、堆栈跟踪。好的,我编辑了我的帖子。谢谢:)