标签: androidasync-koush

AndroidAsync websockets无法正常工作

我正在使用koush的这个AndroidSync库来创建websocket(服务器/客户端)并在两个Android设备之间传输数据.这两个设备通过wifi连接(一个是Wifi AP,另一个连接到它).在发送请求4-5秒后,我在客户端设备中收到TimeoutException.这就是我到目前为止所做的......

ServerActivity.java

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_server);

    mSockets = new ArrayList<WebSocket>();
    mAsyncHttpServer = new AsyncHttpServer();
    mWebSocketCallback = new AsyncHttpServer.WebSocketRequestCallback() {
        @Override
        public void onConnected(final WebSocket webSocket, RequestHeaders headers) {
            mSockets.add(webSocket);
            webSocket.send("Welcome Client");
            webSocket.setClosedCallback(new CompletedCallback() {
                @Override
                public void onCompleted(Exception ex) {
                    try {
                        if (ex != null)
                            Log.e("WebSocket", "Error");
                    } finally {
                        mSockets.remove(webSocket);
                    }
                }
            });
            webSocket.setStringCallback(new WebSocket.StringCallback() {
                @Override
                public void onStringAvailable(String s) {
                    Log.d("SERVERTAG",s);
                    Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show();
                }
            });
        }
    };

    mAsyncHttpServer.websocket("/",mWebSocketCallback);
    mAsyncHttpServer.listen(Utils.PORT_NUMBER); …
Run Code Online (Sandbox Code Playgroud)

java android websocket socket.io androidasync-koush

7
推荐指数
1
解决办法
5679
查看次数

如何使用Koush AndroidAsync关闭/重试/管理WebSocket?

我正在使用Koush的AndroidAsync作为WebSocket客户端.我的代码遵循https://github.com/koush/AndroidAsync中的示例并且有效.(以下复制的例子.)

我需要我的应用程序在启动时打开websocket,但是,我需要处理一些问题:

A)我需要允许用户更改websocket服务器的地址.在这种情况下,我需要关闭现有的websocket(可能已经失败)并打开一个websocket到新服​​务器.

B)服务器可能已关闭或不可用.在这种情况下,我想将此报告回活动.目前它只是默默地失败.

所以按重要性排序:

  1. 如何关闭websocket?
  2. 如何有效地将websocket打开到新地址?(我可以重用我的AsyncHttpClient吗?)
  3. 如何重试失败或丢失的连接?
  4. 如何提供连接失败/关闭的通知?

如果在某处记录,请告诉我.

以下复制的网站示例代码:

AsyncHttpClient.getDefaultInstance().websocket(get,"my-protocol",new WebSocketConnectCallback(){
    @Override
    public void onCompleted(Exception ex,WebSocket webSocket){
        if(ex!=null){
            ex.printStackTrace();
            return;
        }
        webSocket.send("a string");
        webSocket.send(new byte[10]);
        webSocket.setStringCallback(new StringCallback(){
            public void onStringAvailable(String s){
                System.out.println("I got a string: "+s);
            }
        });
        webSocket.setDataCallback(new DataCallback(){
            public void onDataAvailable(ByteBufferList byteBufferList){
                System.out.println("I got some bytes!");
                // note that this data has been read
                byteBufferList.recycle();
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

android websocket androidasync-koush

7
推荐指数
1
解决办法
3607
查看次数

koush Websocket 握手失败

我正在通过 koush https://github.com/koush/AndroidAsync试用该库。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

AsyncHttpClient.getDefaultInstance().websocket(uri, null, new AsyncHttpClient.WebSocketConnectCallback() {
            @Override
            public void onCompleted(Exception ex, WebSocket webSocket) {
                if (ex != null) {
                    ex.printStackTrace();
                    return;
                }
                webSocket.send("a string");
                webSocket.send(new byte[10]);
                webSocket.setStringCallback(new WebSocket.StringCallback() {
                    public void onStringAvailable(String s) {
                        System.out.println("I got a string: " + s);
                    }
                });
                webSocket.setDataCallback(new DataCallback() {
                    public void onDataAvailable(DataEmitter emitter, ByteBufferList byteBufferList) {
                        System.out.println("I got some bytes!");
                        // note that this data has been read
                        byteBufferList.recycle();
                    }
                });
            }
        }); …
Run Code Online (Sandbox Code Playgroud)

java android androidasync-koush java-websocket

5
推荐指数
0
解决办法
161
查看次数

为什么AndroidAsync断开时间这么久?

我正在使用AndroidAsync koush低级网络协议库.我正在使用WebSocket连接到服务器.我能够连接,发送/接收消息和断开连接.我的断开时间很长.服务器平均没有检测到断开连接59秒.

为了重现这个问题,我连接了WebSocket,授权并每隔10秒开始ping一次.然后我打开飞机模式,我的网络连接下降.此时调用setClosedCallback方法.以下是我记录此消息的方式:

private WebSocket mConnection;

private WebSocketConnectCallback mSocketCallback = new WebSocketConnectCallback() {
    @Override
    public void onCompleted(Exception ex, WebSocket webSocket) {
    ...
            webSocket.setClosedCallback(new CompletedCallback() {
            @Override
            public void onCompleted(Exception ex) {
                Log.d("websocket", "WebSocket closed");
                if (ex != null && ex.getMessage() != null) {
                    Log.e("websocket", "WebSocket closed exception: " + ex.getMessage());
                }
                disconnect();
            }
        });
    }
};

private void disconnect() {
    mPingHandler.removeCallbacks(pingRunnable);
    if (mConnection != null) {
        mConnection.close();
        mConnection = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是让我知道WebSocket已关闭的日志消息:

WebSocket关闭异常:recvfrom失败:ETIMEDOUT(连接超时)

但是,我们的服务器大约59秒没有收到断开连接消息.我们的服务器正在使用这些库:

  • GEVENT == 1.0
  • GEVENT-的WebSocket == …

android websocket androidasync-koush

3
推荐指数
1
解决办法
1758
查看次数