小工具知识网

当前位置: 首页 > 行业知识 > kotlin,socket网络传输数据

行业知识

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

        
()

上一篇:怎么打开服务器压塑包?

下一篇:本地网页服务器怎么搭建?