【问题标题】:Confirm data sent through socket had been received in the server确认服务器已收到通过套接字发送的数据
【发布时间】:2019-07-30 16:14:38
【问题描述】:

我在我的 android 应用程序中定义了 websocket,如下所示:

package com.oryx.geoop

import android.content.Context
import androidx.lifecycle.MutableLiveData
import org.java_websocket.client.WebSocketClient
import org.java_websocket.handshake.ServerHandshake
import java.lang.Exception
import java.net.URI

lateinit var mWebSocketClient: WebSocketClient


class SocketClient {
    val uri = URI("ws://10.0.2.2:8080/ws")


    val message = MutableLiveData<String>()

    fun connectWebSocket(context: Context) {
        // Setup stuff

        mWebSocketClient = object : WebSocketClient(uri) {
            override fun onError(ex: Exception?) {
                // TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

            override fun onClose(code: Int, reason: String?, remote: Boolean) {
                // TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

            override fun onOpen(serverHandshake: ServerHandshake) {
                // Opened do some stuff
            }

            override fun onMessage(s: String) {
                message.postValue(s)
            }
        }
        mWebSocketClient.connect()
    }
}

在检查套接字是否打开后,我使用它向服务器发送数据如下:

if (mWebSocketClient.isOpen) {
      mWebSocketClient.send(jObj.toString())
} else {
      client.connectWebSocket(p0)
      mWebSocketClient.send(data)
}

但仍然有疑问,因为连接可能在两者之间的某处被切断,因此需要服务器向 android 应用发送回确认消息。

如何让应用程序理解从服务器返回的消息,以确认接收到手机本身发送的数据。 假设服务器发回的消息是"confirmed, $data"

【问题讨论】:

  • 您可以在每条消息上将消息从服​​务器发送回设备。服务器设置了哪种语言?
  • @theapache64 服务器在Rust 中设置,它发送确认消息为self.out.broadcast(msg); 但我怎样才能让android 应用程序理解这个消息是确认消息,而不是正常消息。
  • 我已经添加了一个答案,请检查它是否符合您的要求

标签: android java-websocket android-websocket


【解决方案1】:

在您发送到服务器的每条消息上,服务器都可以轻松地发回确认消息。方法名称取决于您使用的服务器堆栈。大多数情况下,它类似于client.sendMessage(yourMessage)

现在,让我们回答您在 cmets 部分提出的问题。

我怎样才能让 android 应用理解这个消息是一个确认 一,不是普通的吗?

您可以在JSON中进行交流,而不是传递原始文本

例如,

您可以发送以下格式的正常回复

{
  "type": "NORMAL",
  "id": "someUniqueIdOfTheMessage",
  "message": "This is some normal message"
}

为了确认,服务器可以发回这样的东西

{
  "type": "CONFIRMATION",
  "id": "someUniqueIdOfTheMessage"
}

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多