Click here to Skip to main content
15,889,992 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I'm really new in Kotlin. I have two application one is Client in Android emulator and one is in Windows Form Application Server .I'm communicating via localhost. I can send request and Server can get this request without problem but when i try to get response from Server unfortunately cannot get response.

Can you help me why i cannot do this?

What I have tried:

Here my code<pre lang="kotlin">
<pre>var thread: Thread? = null
var etIP: EditText? = null
var etPort: EditText? = null
var tvMessages: TextView? = null
var etMessage: EditText? = null
var btnSend: Button? = null
var SERVER_IP: String? = null
var SERVER_PORT = 0
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    etIP = findViewById(R.id.etIP)
    etPort = findViewById(R.id.etPort)
    tvMessages = findViewById(R.id.tvMessages)
    etMessage = findViewById(R.id.etMessage)
    btnSend = findViewById(R.id.btnSend)
    val btnConnect: Button = findViewById(R.id.btnConnect)
    btnConnect.setOnClickListener {
        tvMessages!!.text = ""
        SERVER_IP = etIP!!.text.toString().trim { it <= ' ' }
        SERVER_PORT = etPort!!.text.toString().trim { it <= ' ' }.toInt()
        thread = Thread(Thread1())
        thread!!.start()
    }
    btnSend!!.setOnClickListener {
        val message = "Android!"+etMessage!!.text.toString().trim { it <= ' ' }
        if (!message.isEmpty()) {
            Thread(Thread3(message)).start()
        }
    }
}

private var output: PrintWriter? = null
private var input: BufferedReader? = null

internal inner class Thread1 : Runnable {
    override fun run() {
        val socket: Socket
        try {
            socket = Socket(SERVER_IP, SERVER_PORT)
            output = PrintWriter(socket.getOutputStream())
            input = BufferedReader(InputStreamReader(socket.getInputStream()))
            runOnUiThread(Runnable { tvMessages!!.text = "Connected\n" })
            Thread(Thread2()).start()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
}

internal inner class Thread2 : Runnable {
    override fun run() {
        while (true) {
            try {
                val message = input!!.readLine().toString()
                run {
                    runOnUiThread(Runnable { tvMessages!!.append("server: $message\n") })
                }
                run {
                    thread = Thread(Thread1())
                    thread!!.start()
                    return
                }
            } catch (e: Exception) {
                tvMessages!!.text = e.toString()
            }
        }
    }
}

internal inner class Thread3(private val message: String) : Runnable {
    override fun run() {
        output!!.write(message)
        output!!.flush()
        runOnUiThread(Runnable {
            tvMessages!!.append("client: $message\n")
            tvMessages!!.setMovementMethod(ScrollingMovementMethod())
            etMessage!!.setText("")
        })
    }
}
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS


CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900