首页 > 解决方案 > Android Socket Io

问题描述

我正在尝试使用套接字 Io访问此服务器http://zajelme.com:3400 。但是 socket.connected() 给了我错误的信息。

安卓代码

在此处输入图像描述

套接字客户端代码

在此处输入图像描述

摇篮

implementation('com.github.nkzawa:socket.io-client:0.3.0') {
    exclude group: 'org.json', module: 'json'
}

标签: androidsocket.io

解决方案


您实现 Socket 的方式不足以知道为什么我的连接没有建立或发生了什么错误。尝试这种方式可能会帮助您更好地实现 SOCKET 并帮助您更好地调试。

像这样启动 Socket 连接:

Socket mSocket;
 /**
 * Initialize IO Socket Object
 */
private void initSocketConnection() {
    try {
        mSocket = IO.socket("http://zajelme.com:3400");
        connectSocket();
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    }
}

/**
 * Connect socket with the server
 */
private void connectSocket() {
    try {
        mSocket.connect();
        mSocket.on(Socket.EVENT_CONNECT, onConnect);
        mSocket.on(Socket.EVENT_CONNECT_ERROR, onError);
        mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onError);
        mSocket.on(Socket.EVENT_ERROR, onError);
        mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

像这样停止 Socket 连接:

/**
 * Called to stop socket connection and all listeners associated with it
 */
public void stopSocket() {
    if (mSocket != null) {
        mSocket.disconnect();
        mSocket.off(Socket.EVENT_CONNECT, onConnect);
        mSocket.off(Socket.EVENT_DISCONNECT, onDisconnect);
        mSocket.off(Socket.EVENT_CONNECT_ERROR, onError);
        mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onError);
        mSocket.off(Socket.EVENT_ERROR, onError);
        mSocket.off(Socket.EVENT_CONNECTING);
    }
}

以下是您在连接时将连接绑定的默认侦听器,以便在出现错误等情况下您可以清楚地了解发生了什么:

 /**
 * Receiver class for socket disconnected event
 */
private Emitter.Listener onDisconnect = new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        Log.e("SOCKET_TEST", "DISCONNECTION SUCCESSFULL");
    }
};

/**
 * Receiver class for socket connected event
 */
private Emitter.Listener onConnect = new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        Log.e("SOCKET_TEST", "CONNECTION SUCCESSFULL");
    }
};

/**
 * Receiver for socket failed events
 */
private Emitter.Listener onError = new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        Log.e("SOCKET_TEST", "CONNECTION FAIL " + args.toString());

    }
};

在应用程序中:

     compile('io.socket:socket.io-client:0.8.3') {
        // excluding org.json which is provided by Android
        exclude group: 'org.json', module: 'json'
    }

注意:检查日志,以便您知道发生了什么。


推荐阅读