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這邊會回一些值給我們的客戶端
在我們再次按下按鈕後,就會收到我們伺服器端傳來的值