Запись клиентских сокетов - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь, чтобы клиент отправлял и получал сообщения через сокеты, но у меня возникли некоторые трудности. В моем приложении android (написано в kotlin) есть кнопка, которая отправляет сообщение на мой сервер (написано в python) на моем компьютере.

Это работает нормально. Когда моя кнопка нажата, мой сервер получает сообщение. Мой класс для моей пользовательской кнопки показан ниже

class ShortcutButton(context: Context, attrs: AttributeSet):AppCompatImageButton(context, attrs) {

init {
    this.setOnClickListener {
        val tag = it.tag
        val command = tag ?: "none"

        GlobalScope.launch(Dispatchers.IO) {
            try{
                val client = Socket("192.168.1.65", 6769)
                client.outputStream.write((command as String).toByteArray())
            }
            catch(e: Exception){
                Log.e("Port Not Open", e.toString())
            }
        }
    }
}

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    val width = MeasureSpec.getSize(widthMeasureSpec)
    val height = MeasureSpec.getSize(heightMeasureSpec)
    val size = if (width > height) height else width
    setMeasuredDimension(size, size)
}

}

Проблема заключается в том, что я создаю сопрограмму в своем MainActivity для постоянного прослушивания сообщений, отправленных с моего p c обратно на my android app.

class MainActivity : AppCompatActivity() {

val listener = GlobalScope.launch(Dispatchers.IO){
    val client = Socket("192.168.1.65", 6769)
    while(true){
        val stream = client.getInputStream()
        val bytes = ByteArray(1024)
        stream.read(bytes)
        stream.close()
        val message = stream.toString()
    }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    listener.start()
}

После добавления кнопки, кажется, больше не передают сообщения на сервер. Я довольно новичок в kotlin и сокетах, так что я, вероятно, делаю что-то совершенно неправильно

...