Java Websocket 发出数组

标签 java android node.js websocket socket.io

我在 JAVA 中通过 socket.io 发送 JSONArray 时遇到问题。

通过下面的函数,我尝试使用用户名和 token 授权用户。

public static void authorize()
    {
        HashMap<String, String> user = Database.getUser();

        JSONArray req = new JSONArray();

        try {
            JSONObject reqObj = new JSONObject();
            reqObj.put("username", user.get("username"));
            req.put( reqObj );
            reqObj = new JSONObject();
            reqObj.put("usertoken", user.get("usertoken"));
            req.put( reqObj );
        } catch (JSONException e) {
            e.printStackTrace();
        }

        Log.d("WebsocketFunctions", "Authorize: " + req.toString());
        Socket.emit("authorize", req);
    }

这是 Log.d("WebsocketFunctions") 输出:

Authorize: [{"username":"admin"},{"usertoken":"45345980983450983"}]

但是在我的 Node 服务器上我只得到:

debug - websocket writing 1:: {username : 'admin'}

我需要的不仅是用户名,还需要用户 token 。不知何故,用户 token 没有发送到服务器。

这是我的 Node 授权功能:

authorize: function(socket, data)
        {
            console.log('Authorize');
            console.log(data);
        },

最佳答案

我不知道问题出在哪里,但我确信的一件事是,您可以在没有 JSONArray 的情况下完成此操作。我这样做并且有效:

JSONObject obj = new JSONObject();
obj.putOpt("username", user.get("username"));
obj.putOpt("usertoken", user.get("usertoken"));
socket.emit("authorize", obj);

如果您想发送intdouble,请使用:

obj.put("key", value);

您可以通过以下方式在socket.io服务器中访问它:

socket.on("authorize", function(data) {
   var user = data.username;
   var token = data.usertoken;
})

关于Java Websocket 发出数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21514512/

相关文章:

java - JPA @OrderBy 与 Hibernate

java - JTextField 未出现在 JFrame 顶部

java - mybatis 与 <set> 一起使用时,当所有测试失败时,是否可以跳过更新?

android - 限制 Android 同步到 WIFi

java - 使用截图 API

java - 相当于Android中的javax.swing.Timer

javascript - 使用 Puppeteer/Playwright 滚动不适用于 SAPUI5 应用程序

java - 我的源代码怎么可能是 java 1.7 但编译为 1.6

javascript - Nodejs 表单未在 req.body.blog 中发送回任何数据

node.js - 如何设置express中的默认 View 文件夹?