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


<<:  第9章:操作目录与档案权限介绍

>>:  vok-orm 删除关连资料 - day11

【Day 26】CSS Animation - CSS 动画资源蒐集与使用教学

by CSS Animations- Guide to Cubic Bezier Curves 关...

[Day22] - Django-REST-Framework GenericAPIViews 和 Mixins 介绍

GenericAPIView 介绍 GenericAPIView 是 APIView 的延伸,它拥有...

[火锅吃到饱-19] 寿喜烧一丁 - 台中永春店 #甜点区也很赞~

这麽优质的店家,当然要推啦~(所以就再补一篇XD) 检查Youtube的影片,发现有漏网之鱼,这样不...

DAY25 深度学习-卷积神经网路-Yolo v3

今天介绍一下Yolo v3, 首先在v3中使用了darknet-53的架构,架构如下图: 相比v2的...

Day–3 Excel之快速移动栏列之术

欢迎大家,来到了第三天依旧充满干劲,今天要来跟大家介绍Excel的文字格式,以及今天的重点调整栏列的...