【发布时间】:2012-05-20 04:03:40
【问题描述】:
我有一个简单的 Java 程序,它充当服务器,监听 UDP 数据包。然后我有一个通过 3g 发送 UDP 数据包的客户端。
我注意到偶尔会出现以下情况:我发送了一个数据包,但几秒钟后仍未收到。然后我发送另一个数据包,突然它们都到达了。
我想知道是否有可能存在某种系统来等待一定数量的数据,而不是发送一个尺寸过小的数据包。在我的应用程序中,我每个数据包只发送大约 2-3 个字节的数据 - 尽管 UDP 标头和其他什么不会使消息变大一点。
我的应用程序的目的是尽可能快地从 A 到 B 获取这几个字节的数据。非常强调速度。这一切只是巧合吗?我想我可以增加数据包的大小,但似乎传输时间会增加,而且 3g 并不完美。
【问题讨论】:
-
停止猜测。进行数据包跟踪。获取真实数据。
-
要记住的一点是,通常接收端会被命令在返回之前检索一定数量的字节——使用 Wireshark(或类似的)来验证数据是否正在发送并在两端收到。
-
这看起来像是 Wireshark 之类的工作。
-
@Redmumba 由谁订购的? UDP是UDP。数据报应在收到后立即交付给应用程序。
-
对,但是如果您的接收应用程序显示“read(10)”,其中 10 是在程序中处理它之前要缓冲的字节数,那么您的物理机/套接字/任何可能已经收到这些字节但缓冲不足以触发读取操作。就像@Jon 说的:使用 Wireshark。