Java DatagramSocket 无法接收所有数据包

标签 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上运行时,就可以了。没有丢包。

最佳答案

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

关于Java DatagramSocket 无法接收所有数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56197400/

相关文章:

java - ArrayList<R.String> 类型中的方法 add (int, R.String) 不适用于 arguments(int, String)

java - Geotools PolygonExtractionProcess 不起作用

javascript - socket.send 在 io.sockets.on() 之外

Java 网络 "Connection Refused: Connect"

java - 将时间设置为 00 :00:00

java - 将文件从服务器发送到客户端而不逐行发送

Kotlin:从类的属性生成 Comparable#compareTo() 函数

android - Android Studio 中存储的“"don' t 再次询问”设置在哪里

android - 在 Jetpack Compose 中启动动画矢量 Drawable

java - 您如何使用 Java 1.5 BlockingQueue 为多个消费者设计停止条件?