我编写了一个非常简单的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上运行时,就可以了。没有数据包丢失。
答案 0 :(得分:0)
经过多次尝试,我发现当我更改软件包平台时,问题就消失了。所以我想这个问题是由打包工具(带有应用程序插件,Kotlin插件)或某些特定的jdk版本的未知错误引起的。