Я пытаюсь, чтобы клиент отправлял и получал сообщения через сокеты, но у меня возникли некоторые трудности. В моем приложении 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 и сокетах, так что я, вероятно, делаю что-то совершенно неправильно