Tam*_*Ali 9 sockets android tcp kotlin
我在 Windows 上有一个 TCP 服务器,我想在服务器和我的 Android 设备之间发送和接收文本字符串。
我花了很多时间寻找使用 Kotlin 的示例,但没有找到任何有用的代码,所以我现在只能创建套接字和连接。
fun connect() {
try{
val soc = Socket("192.168.1.5", 1419)
val dout = DataOutputStream(soc.getOutputStream())
dout.writeUTF("1")
dout.flush()
dout.close()
soc.close()
}
catch (e:Exception){
e.printStackTrace()
}
}
Run Code Online (Sandbox Code Playgroud)
Max*_*rcu 13
你可以检查这个简单的例子。希望能帮到你!
服务器:
fun main() {
val server = ServerSocket(9999)
println("Server running on port ${server.localPort}")
val client = server.accept()
println("Client connected : ${client.inetAddress.hostAddress}")
val scanner = Scanner(client.inputStream)
while (scanner.hasNextLine()) {
println(scanner.nextLine())
break
}
server.close()
}
Run Code Online (Sandbox Code Playgroud)
客户:
fun main() {
val client = Socket("127.0.0.1", 9999)
client.outputStream.write("Hello from the client!".toByteArray())
client.close()
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用ktor来完成此操作,它是一个基于 kotlin 的异步框架。它本身使用允许并发的协程。
使用 Kotlin 1.4 和 ktor 1.6.0,将其添加到您的build.gradle.kts
:
plugins {
kotlin("jvm") version "1.4.32"
}
dependencies {
implementation("io.ktor:ktor-server-netty:1.6.0")
implementation("io.ktor:ktor-network:1.6.0")
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用套接字,它仍然有点实验性,但它已经实现了,ktor-network
现在需要更新的版本。
这是代码:
服务器:
suspend fun server() {
val server = aSocket(ActorSelectorManager(Executors.newCachedThreadPool().asCoroutineDispatcher())).tcp()
.bind(InetSocketAddress("127.0.0.1", 2323))
println("Server running: ${server.localAddress}")
val socket = server.accept()
println("Socket accepted: ${socket.remoteAddress}")
val input = socket.openReadChannel()
val output = socket.openWriteChannel(autoFlush = true)
val line = input.readUTF8Line()
println("received '$line' from ${socket.remoteAddress}")
output.writeFully("$line back\r\n".toByteArray())
}
Run Code Online (Sandbox Code Playgroud)
客户:
suspend fun client() {
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.writeFully("hello\r\n".toByteArray())
println("Server said: '${input.readUTF8Line()}'")
}
Run Code Online (Sandbox Code Playgroud)
运行它们:
fun main() {
CoroutineScope(Dispatchers.Default).launch { server() }
runBlocking { client() }
}
Run Code Online (Sandbox Code Playgroud)
当您运行它们时,客户端将发送一条消息,服务器将响应,您应该看到如下内容:
Server running: /127.0.0.1:2323
Socket accepted: /127.0.0.1:56215
received 'hello' from /127.0.0.1:56215
Server said: 'hello back'
Run Code Online (Sandbox Code Playgroud)
在他们的文档中找到更多示例简单的回显服务器
归档时间: |
|
查看次数: |
14187 次 |
最近记录: |