【问题标题】:How to receive data from server using Kotlin?如何使用 Kotlin 从服务器接收数据?
【发布时间】:2020-06-20 17:01:55
【问题描述】:

我有一个用 python 编写的服务器和一个用 Kotlin 编写的 Android 客户端(在 Android Studio IDE 中)。我使用套接字来维持这种连接。客户端向服务器发送消息后,服务器需要向客户端发送应答。我没有找到使用套接字在客户端接收数据的方法。我试图这样做:

var server = Socket(serverIP, serverPort)
server.outputStream.write(message.toByteArray())
var answer = server.inputStream.bufferedReader().use(BufferedReader::readText)
server.close()

但它似乎不起作用。如果重要的话,服务器端的发送看起来像这样:

client.send(message.encode())

【问题讨论】:

  • 您给我们留下了很多想象空间。 message 是什么?里面有什么?什么类型的编码?最后发送的是什么?

标签: python android sockets kotlin client-server


【解决方案1】:

我想,您正在为此使用 OkHttp。在我的应用程序中,我有以下代码

private fun getClient(): OkHttpClient {
    return try {
        val builder = OkHttpClient.Builder()
        builder.pingInterval(30, TimeUnit.SECONDS)
        builder.build()
    } catch (e: Exception) {
        throw RuntimeException(e)
    }
}

class WebSocketController(
    val callback: SomeCallback
) {
    private val url = "wss://your.url.com/"

    private val socketClient = getClient()
    private var serverSocket: WebSocket? = null

    private val listener = object : WebSocketListener() {
        override fun onOpen(webSocket: WebSocket, response: Response) {
            super.onOpen(webSocket, response)

            val json = "" // your payload to send on connect
            serverSocket = webSocket
            serverSocket!!.send(json)
        }

        override fun onMessage(webSocket: WebSocket, text: String) {
            super.onMessage(webSocket, text)
            val data = Json.decodeFromString<YourModel>(text)

            // here you can use your data from server
            callback.makeSomething(data)
        }

        override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
            super.onFailure(webSocket, t, response)
            callback.onFailure(t)
        }
    }

    fun establishConnection() {
        socketClient.newWebSocket(requestBuilder().build(), listener)
    }

    fun disconnect() {
        val json = "" // your payload on disconnect
        serverSocket?.send(json)
    }

    private fun requestBuilder(): Request.Builder = Request.Builder().url(url)
}

【讨论】:

    猜你喜欢
    • 2016-12-28
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2019-04-13
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多