iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
Mobile Development

來學習寫安卓手機的程式吧-Kotlin語言系列 第 26

Day 26 Socket的實際應用(二)

Day 26 Socket的實際應用(二)
昨天我們講了Socket應用中的python客戶端,我們今天繼續,我們今天會講Kotlin的客戶端,和兩者如何一起使用,並且,我們的Kotlin客戶端會在Android Studio作為一個Android程式
使用。

Kotlin客戶端

首先且最重要的是,在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伺服器端的程式
https://ithelp.ithome.com.tw/upload/images/20210926/20140419mqkb8sYm2N.png
接者運行Android程式
https://ithelp.ithome.com.tw/upload/images/20210926/20140419ac4zWxXE1Y.png
在我們按下按鈕後,Python伺服器端會打印出已連接,我們從Python這邊會回一些值給我們的客戶端
https://ithelp.ithome.com.tw/upload/images/20210926/20140419RkmO0xJBTh.png
在我們再次按下按鈕後,就會收到我們伺服器端傳來的值
https://ithelp.ithome.com.tw/upload/images/20210927/20140419siM6lrdXTW.png


上一篇
Day 25 - Socket的實際應用
下一篇
Day 27 - Kotlin的類別繼承和覆寫
系列文
來學習寫安卓手機的程式吧-Kotlin語言30

尚未有邦友留言

立即登入留言