2020年8月25日 星期二

android 用 kotlin coroutine 語法測試 Socket

以往使用 tcp Socket 通信免不了要用 Thread 處理非同步的工作(async  task), 但有了  couroutines 程式庫後就容易多了, 但要注意的是 Android 不能在主程(MainThread 又稱為 UI Thread)使用網路的功能,這時就要用派任工 Dispatchers.IO 分配到後台去執行, Java 有內建 Socket 及 ServerSocket 兩種類型的程式庫, 若要當 tcp  伺服器時用 ServerSocket , 一般的 tcp client 就是 Socket 類型:

    import kotlinx.coroutines.*
   //  import java.net.ServerSocket // tcp server class
    import java.net.Socket  // tcp client class

    private suspend fun testSocket()  {
        try {
            val socket  = Socket("www.google.com.tw", 443) // TCP socket for client
            val connect = socket.isConnected()
            println("$socket : $connect")
            socket.close()
        } catch (e: Exception) {
            println("Socket Error@testSocket: $e")
        }
    }
主程序用 GlobalScope.launch 直接發動 coroutines:
    GlobalScope.launch(Dispatchers.IO) {                      
        launch {
            testSocket()
        }
        // ...
    }

備註:
AndroidManifest.xml 添加網路授權:
          <uses-permission android:name="android.permission.INTERNET" />
build.gradle 添加 kotlin coroutines 程式庫:
     dependencies {
         implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
         implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
         implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
     }


沒有留言:

張貼留言

用 emcc compiler 寫簡單的 openGL 繪圖, 讓瀏覽器也能觀看

在瀏覽開啟 html 檔, 裡面除了可以用 javascript 語言來運行openGL ES, 也能用 wasm 語言來運作 , 透過 emcc 編譯器可以將 c 語言翻譯成 wasm, 安裝方式詳如 Emscripten 官網: https://emscripten.org/...