Java DatagramSocket无法接收所有数据包

时间:2019-05-18 08:51:15

标签: java sockets kotlin datagram

我编写了一个非常简单的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()中。同时在Surface Pro上运行的Wireshark显示接收到全部1000个数据包。

当程序在Mac Pro上运行时,就可以了。没有数据包丢失。

1 个答案:

答案 0 :(得分:0)

经过多次尝试,我发现当我更改软件包平台时,问题就消失了。所以我想这个问题是由打包工具(带有应用程序插件,Kotlin插件)或某些特定的jdk版本的未知错误引起的。