Day 26 Socket的實際應用(二)
昨天我們講了Socket應用中的python客戶端,我們今天繼續,我們今天會講Kotlin的客戶端,和兩者如何一起使用,並且,我們的Kotlin客戶端會在Android Studio作為一個Android程式
使用。
首先且最重要的是,在Manifest.xml中加入下面這行
這是對網路的允許,不加入會報錯無法使用
    <uses-permission android:name="android.permission.INTERNET" />
我是把Socket獨立成一個class,所以我們就先來看我們的class:socket吧!
我們先import讀取和socket套件,並且定義寫一個run函式,裡面會判斷我們讀到的值是否為空值,若不為空值,就會傳我們讀到的值。
import java.io.BufferedReader
import java.io.InputStreamReader
import java.net.Socket
class ClientSo(host: String, port: Int) : Socket(host, port) {
    var reader = BufferedReader(InputStreamReader(inputStream))
    var text = ""
    fun run(): String {
        val line = reader.readLine()
        if(line!= null)
            return line
        else
            return "fail"
    }
}
接者我們來看主程式,我們寫一個show函式來顯示我們的值,並且寫一個press綁定到我們的按鈕上,當按鈕按下,就開啟一個新的線程並且呼叫run,最後show出我們的值。
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.TextView
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    val host = "192.168.0.197"
    val port = 8001
    var sum = ""
    fun show(sum:String){
        val textView: TextView =  findViewById(R.id.textView)
        textView.text = sum
    }
    fun press(@Suppress("UNUSED_PARAMETER")view: View) {
        Thread(Runnable {
            sum= ClientSo(host, port).run()
        }).start()
        show(data.toString())
    }
}
最後,當然是要看我們兩個程式一起運行的結果啦,首先我們先開啟我們Python伺服器端的程式
接者運行Android程式
在我們按下按鈕後,Python伺服器端會打印出已連接,我們從Python這邊會回一些值給我們的客戶端
在我們再次按下按鈕後,就會收到我們伺服器端傳來的值