起首 clientThread 线程的目标是调用 DatagramSocket receive 办法,因为 receive 办法是浊宣的,不克不及放在主线程,所以天然开启一个子线程了。receiveMessage 就是处理接收到的 UDP 数捷报,我们先不看接法术据的┞封个办法,毕竟还没人发消息呢,天然就谈不上收了。
心跳包保持“长连接”
来到本文的第一个重点,我们都知道 UDP 本身没有连接的概念。在 Android 端应用 UDP 和 TCP 的场景是一个手机连接另一个手机的热点,二者处在同一局域网中。在二者并不知道对方的存在时,怎么才能发明彼此呢?
经由过程心跳包的方法,两边都每隔一段时光发一个 UDP 包,如不雅对方接收到了,那就能知道对方的 ip,建立起通信了。
- private static final long TIME_OUT = 120 * 1000;
- private static final long HEARTBEAT_MESSAGE_DURATION = 10 * 1000;
- /**
- * 启动心跳,timer 距离十秒
- */
- private void startHeartbeatTimer() {
- timer = new HeartbeatTimer();
- timer.setOnScheduleListener(new HeartbeatTimer.OnScheduleListener() {
- @Override
- public void onSchedule() {
- Log.d(TAG, "timer is onSchedule...");
- long duration = System.currentTimeMillis() - lastReceiveTime;
- Log.d(TAG, "duration:" + duration);
- if (duration > TIME_OUT) {//若跨越两分钟都充公到我的心跳包,则认为对方不在线。
- Log.d(TAG, "超时,对方已经下线");
- // 刷新时光,从新进入下一?心跳周期
- lastReceiveTime = System.currentTimeMillis();
推荐阅读
简介集合可视化我们用得最多的是韦恩图,韦恩图在集合数少的时刻是很好用的,然则当集合数多比如五个以上的时刻那就会看花眼了,比如下面这副含有6个集合韦恩图,是揭橥在Nature汕9依υ?┞仿里的,漂>>>详细阅读
本文标题:在Android上,一个完整的UDP通信模块应该是怎样的?
地址:http://www.17bianji.com/lsqh/38001.html
1/2 1