在 Kotlin 中,不能将数据作为单独的变量发送到套接字服务器



来自我由 Kotlin 编写的应用程序:

var args = JSONArray()
args.put(uid)
args.put(tic)
socket.emit("join_game",args)

从服务器端,代码是:

socket.on('join_game',function(uid, tic){

正如预期的那样,它应该将 uid 和 tic 发送到服务器,但它只将数据作为"{uid},{tic}"发送到服务器中的 uid,此时 tic 变为空。

我还尝试使用 args 作为 JSONObject 和 Array。他们都失败了。它将对象类型和java.string类型发送到服务器。

从指南弹出窗口中,我可以通过3种方式发出

socket.emit(event: String!, vararg args: Any!)
socket.emit(event: String!, args: Array<(out) Any!>!, ack: Ack!)
socket.emit(event: String!, args: Array<(out) Any!>!, ack: ((args:Array<(out) Any!>!) -> Unit)!

我用于我的应用程序的套接字是com.github.nkzawa:socket.io-client:0.3.0

注意:服务器代码是正确的,因为我可以将数据作为 2 个变量从我的 ios 版本发送到服务器。

根据代码,socket.emitargs包装成JSONArray,因此您在此处调用它的方式实际上最终会在JSONArrayJSONArray(这可能解释了服务器上的输出(。

相反,如果您使用第一个签名,您实际上可以直接像这样传递参数:

socket.emit("join_game", uid, tic)

在基本层面上,vararg关键字意味着您可以传递任意数量的参数来代替单个"参数"(在本例中为args(。有关此概念的更多信息,请参阅此处。

相关内容

最新更新