Java DatagramSocket не может получить все пакеты - PullRequest
0 голосов
/ 18 мая 2019

Я пишу очень простую программу kotlin для получения изображения от клиента.ключевая часть, как указано ниже.

      while (running) {
        try {
            buf = ByteArray(buffSize)
            packet = DatagramPacket(buf, buf.size)
            socket.receive(packet)
            // put packet data in blockingQueue, use thread to consume the queue
            queue.offer(arrayOf(buf.clone(), packet!!.address, packet!!.port, packet!!.length))
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

когда эта программа работает на Surface Pro, она не может получить все пакеты, отправленные ей клиентом.например, клиент отправляет 1000 пакетов, он получает 900 пакетов, а затем застрял в socket.receive ().Wireshark, запущенный одновременно на Surface Pro, показывает, что все 1000 пакетов получены.

, когда программа работает на Mac Pro, это просто нормально.пакет не потерян.

1 Ответ

0 голосов
/ 18 мая 2019

после многих попыток я узнаю, когда я изменил платформу пакета, проблема исчезла.так что я полагаю, что проблема вызвана инструментом пакета (Gradle с плагином приложения, плагином Kotlin), или некоторыми неизвестными ошибками определенной версии JDK.

...