Java DatagramSocket 无法接收所有数据包
Posted
技术标签:
【中文标题】Java DatagramSocket 无法接收所有数据包【英文标题】:Java DatagramSocket can't receive all packets 【发布时间】: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 上运行时,一切正常。没有丢包。
【问题讨论】:
【参考方案1】:经过多次尝试,我发现当我更改包平台时问题就消失了。所以我猜这个问题是由打包工具(带有应用程序插件的gradle,Kotlin插件)或特定jdk版本的一些未知错误引起的。
【讨论】:
以上是关于Java DatagramSocket 无法接收所有数据包的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 中同时使用 Datagramsocket 发送和接收 - 只是发送?
Java-API DatagramSocket 数据报套接字 类