行业知识
kotlin,socket网络传输数据
2026-10-31 22:54:31
来源:互联网转载
MainActivity.kt
()package com.example.applicationtest2import androidx.appcompat.app.AppCompatActivityimport android.os.Bundle//import android.support.v7.app.AppCompatActivityimport android.view.Viewimport android.widget.Buttonimport android.widget.TextViewimport java.io.BufferedInputStreamimport java.io.BufferedOutputStreamimport java.io.Fileimport java.io.FileInputStreamimport java.net.Socketclass MainActivity : AppCompatActivity() { private lateinit var transferButton: Button private lateinit var resultTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) transferButton = findViewById(R.id.transferButton) resultTextView = findViewById(R.id.resultTextView) transferButton.setOnClickListener { Thread { val serverAddress = "127.0.0.1" // Kotlin 服务器的 IP 地址 val serverPort = 12345 // Kotlin 服务器的端口号 val filePath = "/path/to/file" // 待传输的文件路径 try { val socket = Socket(serverAddress, serverPort) val file = File(filePath) val outputStream = BufferedOutputStream(socket.getOutputStream()) val inputStream = BufferedInputStream(FileInputStream(file)) // 发送文件名和文件大小给 Kotlin 服务器 val fileNameBytes = file.name.toByteArray() val fileSizeBytes = file.length().toString().toByteArray() outputStream.write(fileNameBytes.size) outputStream.write(fileNameBytes) outputStream.write(fileSizeBytes.size) outputStream.write(fileSizeBytes) outputStream.flush() // 接收服务器确认 val confirmation = socket.getInputStream().read() if (confirmation == 1) { // 开始传输文件数据 val buffer = ByteArray(8192) var bytesRead: Int while (inputStream.read(buffer).also { bytesRead = it } != -1) { //从输入流读取数据到缓冲区中 outputStream.write(buffer, 0, bytesRead) //将缓冲区的数据写入到输出流中 outputStream.flush() // 等待对方确认 val acknowledgement = socket.getInputStream().read() if (acknowledgement != 1) { runOnUiThread { resultTextView.text = "传输失败,未收到对方确认" } break } } socket.shutdownOutput() // 接收并显示传输结果 val result = socket.getInputStream().bufferedReader().readLine() runOnUiThread { resultTextView.text = result } } else { runOnUiThread { resultTextView.text = "传输失败,对方拒绝接收" } } inputStream.close() outputStream.close() socket.close() } catch (e: Exception) { e.printStackTrace() runOnUiThread { resultTextView.text = "传输失败:" + e.message } } }.start() } }} activity_mian.xml
()
上一篇:怎么打开服务器压塑包?
下一篇:本地网页服务器怎么搭建?