Android Kotlin使用okhttp与socket连接点击按钮发送数据给服务器 详细代码
以下是一个使用OkHttp和Socket连接的示例代码:
首先,确保在build.gradle文件中添加OkHttp和Kotlin的依赖项:
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
}
然后,在Activity或Fragment中创建一个按钮,并在点击事件中发送数据给服务器:
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.WebSocket
import okhttp3.WebSocketListener
import okio.ByteString
class MainActivity : AppCompatActivity() {
private lateinit var client: OkHttpClient
private lateinit var socket: WebSocket
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val connectButton: Button = findViewById(R.id.connectButton)
connectButton.setOnClickListener {
connectToServer()
}
val sendButton: Button = findViewById(R.id.sendButton)
sendButton.setOnClickListener {
sendDataToServer()
}
}
private fun connectToServer() {
val request = Request.Builder()
.url("ws://your_server_url")
.build()
client = OkHttpClient()
socket = client.newWebSocket(request, object : WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: okhttp3.Response) {
// 连接成功
}
override fun onMessage(webSocket: WebSocket, text: String) {
// 接收到服务器发送的消息
}
override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
// 接收到服务器发送的二进制数据
}
override fun onFailure(webSocket: WebSocket, t: Throwable, response: okhttp3.Response?) {
// 连接失败
}
})
}
private fun sendDataToServer() {
GlobalScope.launch(Dispatchers.IO) {
withContext(Dispatchers.Main) {
socket.send("Hello, server!") // 发送文本消息给服务器
// socket.send(ByteString.encodeUtf8("Hello, server!")) // 发送二进制数据给服务器
}
}
}
}
请确保将ws://your_server_url替换为您的服务器URL。注意,这只是一个简单的示例,实际使用时您可能需要处理连接和发送数据的逻辑,并根据服务器响应进行相应的操作
原文地址: https://www.cveoy.top/t/topic/ixuA 著作权归作者所有。请勿转载和采集!