试图在android和QtWebSocket之间创建websocket连接

时间:2016-02-21 18:41:14

标签: java android qt websocket

我正在尝试使用websocket创建聊天应用,但出于某种原因我无法正常连接。从Android创建连接时,我总是得到:"连接被拒绝"但是当我尝试连接标准的Mozzila Websocket时,它的效果非常好。你们能帮我弄清问题究竟是什么吗?

我使用的服务器是来自QtWebsockets的示例中的服务器: https://github.com/qtproject/qtwebsockets/tree/dev/examples/websockets/simplechat

包含html客户端并且工作正常。

我在android上的代码看起来像:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    Log.e(TAG, "start command");

    String SERVER = "ws://127.0.0.1:8181";

    Future webSocket = AsyncHttpClient.getDefaultInstance().websocket(SERVER, "my-protocol", 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();
                }
            });
        }
    });

    return START_STICKY;
}

这是我得到的输出:

02-21 19:27:09.270 4360-4360/com.example.dragan.websockettest E/DataService: start command
02-21 19:27:09.414 4360-4367/com.example.dragan.websockettest W/art: Suspending all threads took: 68.053ms
02-21 19:27:09.512 4360-4372/com.example.dragan.websockettest W/art: Suspending all threads took: 22.131ms
02-21 19:27:09.551 4360-4372/com.example.dragan.websockettest I/art: Background partial concurrent mark sweep GC freed 3293(186KB) AllocSpace objects, 0(0B) LOS objects, 45% free, 1209KB/2MB, paused 49.434ms total 416.153ms
02-21 19:27:09.677 4360-4398/com.example.dragan.websockettest W/System.err: java.net.ConnectException: failed to connect to /127.0.0.1 (port 8181): isConnected failed: ECONNREFUSED (Connection refused)
02-21 19:27:09.677 4360-4398/com.example.dragan.websockettest W/System.err:     at libcore.io.IoBridge.isConnected(IoBridge.java:238)
02-21 19:27:09.677 4360-4398/com.example.dragan.websockettest W/System.err:     at java.nio.SocketChannelImpl.finishConnect(SocketChannelImpl.java:277)
02-21 19:27:09.677 4360-4398/com.example.dragan.websockettest W/System.err:     at com.koushikdutta.async.AsyncServer.runLoop(AsyncServer.java:802)
02-21 19:27:09.677 4360-4398/com.example.dragan.websockettest W/System.err:     at com.koushikdutta.async.AsyncServer.run(AsyncServer.java:627)
02-21 19:27:09.678 4360-4398/com.example.dragan.websockettest W/System.err:     at com.koushikdutta.async.AsyncServer.access$700(AsyncServer.java:41)
02-21 19:27:09.697 4360-4398/com.example.dragan.websockettest W/System.err:     at com.koushikdutta.async.AsyncServer$13.run(AsyncServer.java:569)
02-21 19:27:09.697 4360-4398/com.example.dragan.websockettest W/System.err: Caused by: android.system.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)
02-21 19:27:09.697 4360-4398/com.example.dragan.websockettest W/System.err:     at libcore.io.IoBridge.isConnected(IoBridge.java:223)
02-21 19:27:09.708 4360-4398/com.example.dragan.websockettest W/System.err:     ... 5 more
02-21 19:27:09.743 4360-4387/com.example.dragan.websockettest I/OpenGLRenderer: Initialized EGL, version 1.4
02-21 19:27:09.782 4360-4387/com.example.dragan.websockettest D/OpenGLRenderer: Enabling debug mode 0
02-21 19:27:09.850 4360-4387/com.example.dragan.websockettest W/EGL_emulation: eglSurfaceAttrib not implemented
02-21 19:27:09.850 4360-4387/com.example.dragan.websockettest W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xb3ee6300, error=EGL_SUCCESS
02-21 19:28:26.830 4360-4367/com.example.dragan.websockettest W/art: Suspending all threads took: 15.890ms
02-21 19:28:33.331 4360-4367/com.example.dragan.websockettest W/art: Suspending all threads took: 9.412ms
02-21 19:32:40.430 4360-4367/com.example.dragan.websockettest W/art: Suspending all threads took: 18.013ms

我真的不知道如何猜测这里发生了什么,因为html客户端工作正常。我甚至为Qt添加了一些额外的监听器:

if (m_pWebSocketServer->listen(QHostAddress::LocalHost, port))
{
        qDebug() << "Chat Server listening on port" << port;

        connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
                this, &ChatServer::onNewConnection);

        connect(m_pWebSocketServer, &QWebSocketServer::acceptError,
                this, &ChatServer::onAcceptError);

        connect(m_pWebSocketServer, &QWebSocketServer::peerVerifyError,
                this, &ChatServer::onPeerVerifyError);

        connect(m_pWebSocketServer, &QWebSocketServer::serverError,
                this, &ChatServer::onServerError);

}

但没有一个触发。

你们知道发生了什么吗?

0 个答案:

没有答案