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