问题描述
我正在尝试为 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 (将#修改为@)