https://stackoverflow.com/q/55533832/5105007
class UdpSendActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_udp_send)
Thread(::runTest1).start()
Thread(::runTest2).start()
}
fun runTest1():Unit {
val dstAddressList = List(50 ){
Inet4Address.getByName("192.168.1.${10 + it}")
}
val srcSocket = DatagramSocket()
val byteArray = ByteArray(500)
val startMs = System.currentTimeMillis()
for (dstAddress in dstAddressList) {
val packet = DatagramPacket(byteArray, 0, byteArray.size, dstAddress, 55555)
srcSocket.send(packet)
srcSocket.send(packet)
srcSocket.send(packet)
srcSocket.send(packet)
}
val costMs = System.currentTimeMillis() - startMs
Log.e("UdpSendActivity", "#A $costMs ms")
}
fun runTest2():Unit {
val dstAddressList = List(50 ){
Inet4Address.getByName("192.168.1.${10 + it}")
}
// val srcSocket = DatagramSocket()
val byteArray = ByteArray(500)
val startMs = System.currentTimeMillis()
for (dstAddress in dstAddressList) {
val packet = DatagramPacket(byteArray, 0, byteArray.size, dstAddress, 55555)
// the diffrent line
val srcSocket = DatagramSocket()
srcSocket.send(packet)
srcSocket.send(packet)
srcSocket.send(packet)
srcSocket.send(packet)
}
val costMs = System.currentTimeMillis() - startMs
Log.e("UdpSendActivity", "#B $costMs ms")
}
}
log:
E/UdpSendActivity: #B 23 ms
E/UdpSendActivity: #A 1507 ms
两个测试的区别在于使用一个 DatagramSocket 发送给所有的目的地址 还是 每个目的地址创建一个新的 DatagramSocket 来发送,日志显示前者速度非常慢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.