Двусторонняя связь между устройствами

Поэтому я испытываю странную проблему при попытке связаться через TCP с двумя моими планшетами и внешним устройством с поддержкой Wi-Fi.

Я постараюсь описать проблему как можно лучше. Система работает следующим образом (вся связь осуществляется по беспроводной сети):

  • устройство отправляет TCP-сообщение на планшет A
  • планшет A ( мастер ) отображает сообщение и повторяет сообщение на планшет B ( ведомый ) – это отлично работает
  • планшет A отправляет другое сообщение (сообщение о действии ) на планшет B , который планшет B получает без проблем
  • когда планшет B выполняет действие, он отправляет сообщение о действиях на планшет A – вот в чем проблема, сообщение не потребляется, даже если оно отправлено. Если я перейду к другому activity и вернусь к предыдущему, сообщение будет потреблено

Это происходит с планшетами Lenovo YT3 под управлением Android 6.0.1

SocketListenerService

 private var thread: Thread? = null private var socketListener: SocketListener? = null private var broadcastManager: LocalBroadcastManager? = null val listener = object : SimpleServer.ServerReceivedListener { override fun onLineReceived(line: String) { val response = Intent(SOCKET_RESPONSE) response.putExtra(RESPONSE_MESSAGE, line) broadcastManager!!.sendBroadcast(response) } } private val incomingServer = SimpleServer(listener) override fun onCreate() { super.onCreate() broadcastManager = LocalBroadcastManager.getInstance(this) } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { if (intent != null) { socketListener = SocketListener() thread = Thread(socketListener) thread!!.start() } return super.onStartCommand(intent, flags, startId) } override fun onDestroy() { super.onDestroy() socketListener!!.shutDown() thread!!.interrupt() incomingServer.closeServer() } override fun onBind(intent: Intent): IBinder? { return null } private inner class SocketListener : Runnable { @Volatile private var done = false internal fun shutDown() { done = true } override fun run() { while (!done) { incomingServer.serve() } } } companion object { val SOCKET_RESPONSE = "socket_response" val RESPONSE_MESSAGE = "response_message" val port = 9888 } 

SimpleServer

 interface ServerReceivedListener { fun onLineReceived(line: String) } private var server: ServerSocket? = null private var client: Socket? = null private var listener: ServerReceivedListener? = null init { try { server = ServerSocket(SocketListenerService.port) this.listener = listener } catch (err: Exception) { err.printStackTrace() } } fun serve() { var line: String? try { if (!server!!.isClosed) { client = server?.accept() val r = BufferedReader(InputStreamReader(client!!.getInputStream(), "UTF-8")) line = r.readLine() while (line != null) { if (line.length >= 4) listener!!.onLineReceived(line) else listener!!.onLineReceived("@") line = r.readLine() } } } catch (e: IOException) { if (!e.message!!.contains("Socket closed")) e.printStackTrace() } } fun closeServer() { try { if (client != null) client!!.close() server!!.close() } catch (e: IOException) { e.printStackTrace() } } 

BroadcastBeceiver в свою очередь, получает сообщение от намерения и использует интерфейс для отправки его в activity

Я просто не могу понять, почему сообщение от подчиненного устройства получает только хозяин, когда перезапуск activity потребления (?)

    Это проблема сокета. Теперь у меня есть два потока, прослушивающих два порта, и связь работает нормально