yasar31 Ответов: 0

Kotlin bufferreader не получает ответа сервера


Я действительно Новичок в Котлине. У меня есть два приложения, одно из которых является клиентом в эмуляторе Android, а другое-в сервере приложений Windows Form .Я общаюсь через localhost. Я могу отправить запрос, и сервер может получить этот запрос без проблем, но когда я пытаюсь получить ответ от сервера, к сожалению, не могу получить ответ.

Можете ли вы мне помочь, почему я не могу этого сделать?

Что я уже пробовал:

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("")
        })
    }
}

0 Ответов