使用 ktor-network 进行套接字编程无法将字符串写入服务器

问题描述

我正在尝试为 wifi 设备构建一个客户端作为服务器。我使用 ktor-network client docs 作为参考,它显示客户端实现如下,非常简单。

fun main(args: Array<String>) {
    runBlocking {
        val socket = aSocket(ActorSelectorManager(dispatchers.IO)).tcp().connect(InetSocketAddress("127.0.0.1",2323))
        val input = socket.openReadChannel()
        val output = socket.openWriteChannel(autoFlush = true)

        output.write("hello\r\n")
        val response = input.readUTF8Line()
        println("Server said: '$response'")
    }
}

但问题是当我尝试 output.write(USERNAME) 时,其中 USERNAME 是字符串常量。尽管我使用 write 方法进行了测试,但 IDE 显示了写入功能已弃用警告,但服务器也没有给出任何响应。我浏览了文档,它建议使用 writeFully 而不是 write。所以我做了更改并测试它仍然没有成功。所需的输出是服务器给出响应“密码:”但没有返回任何内容

服务器端没有问题,因为它是在iOS实现中工作的。

这是我的套接字客户端的实现:

runBlocking {
    val socket = aSocket(ActorSelectorManager(dispatchers.IO)).tcp()
        .connect(InetSocketAddress(IP,PORT))

    input = socket.openReadChannel()
    output = socket.openWriteChannel(autoFlush = true)

    while (!socket.isClosed) {
        val response = input.readUTF8Line()
        Timber.e("Server said: '$response'")

        when(response){
            "login:"->{
                output.writeFully(USERNAME.toByteArray(Charsets.UTF_8))
            }
            "password:"->{
                output.writeFully(PASSWORD)
            }
        }

        delay(1000)
    }

    Timber.e("Stopped'")

}}catch (e: ConnectException){
    Timber.e(e)
}

我已经尝试过 ByteWriteChannel输出实例类)类的这些方法write(string)writeFully(byteArray)writeStringUtf8(string)。都没有用!

能否请您帮我看看这里出了什么问题,或者这个问题的解决方案是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)