【问题标题】:Java DatagramSocket can't receive all packetsJava DatagramSocket 无法接收所有数据包
【发布时间】:2019-05-18 08:51:14
【问题描述】:

我编写了一个非常简单的 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 上运行时,一切正常。没有丢包。

【问题讨论】:

    标签: java sockets kotlin datagram


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 2014-09-27
      • 1970-01-01
      相关资源
      最近更新 更多