沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!
TCP与UDP差别比较分析
在这篇文┞仿中,在靠得住性、数据发送、实用处景等多个方面分析了二者的差别。而本文的目标是想给大年夜家介绍下在 Android 设备上,一个手机经由过程热点连接另一个手机。这种场景下,完全的 UDP 通信模块应当推敲哪些方面,又应当若何优化,若何避开一些坑呢?
我们都知道,开辟一个 Android 应用法度榜样,今朝大年夜多半照样应用的是 Java 说话。在 Java 说话中怎么去应用 UDP 协定呢?
上篇文┞仿中我们没说 Socket,其实 Socket 可以懂得为对 TCP、UDP 协定在法度榜样应用层面的封装,供给出一些 api 来供法度榜样员调用开辟,这就是 Socket 最表层的含义。
在 Java 中,与 UDP 相干的类有 DatagramSocket、DatagramPacket 等,关于他们的应用,这里不侧重介绍。
好了,假设大年夜家对他们的应用都已大年夜概懂得,可以正式开端本文的内容了。
初始化一个 UDPSocket
起首创建一个叫 UDPSocket 的类。
- public UDPSocket(Context context) {
- this.mContext = context;
- int cpuNumbers = Runtime.getRuntime().availableProcessors();
- // 根据CPU数量初始化线程池
- mThreadPool = Executors.newFixedThreadPool(cpuNumbers * POOL_SIZE);
- // 记录创建对象时的时光
- lastReceiveTime = System.currentTimeMillis();
- }
在构造办法里,我们进行下一些初始化操作,简单来说就是创建一个线程池,记录一下当前时光毫秒值,至于他们有什么竽暌姑,再往下看:
- public void startUDPSocket() {
- if (client != null) return;
- try {
- // 注解这个 Socket 在设置的端口上监听数据。
- client = new DatagramSocket(CLIENT_PORT);
- if (receivePacket == null) {
- // 创建接法术据的 packet
- receivePacket = new DatagramPacket(receiveByte, BUFFER_LENGTH);
- }
- startSocketThread();
- } catch (SocketException e) {
- e.printStackTrace();
- }
- }
这里我们起首创建了一个 DatagramSocket 作为“客户端”,其实 UDP 本身没有客户端和办事端的概念,只有发送方和接收方的概念,我们把发送方临时当成是一个客户端吧。
创建 DatagramSocket 对象时,传入了一个端标语,这个端标语可以在一个范围内本身定义,表示这个 DatagramSocket 在此端口上监听数据。
- /**
- * 开启发送数据的线程
- */
推荐阅读
简介集合可视化我们用得最多的是韦恩图,韦恩图在集合数少的时刻是很好用的,然则当集合数多比如五个以上的时刻那就会看花眼了,比如下面这副含有6个集合韦恩图,是揭橥在Nature汕9依υ?┞仿里的,漂>>>详细阅读
本文标题:在Android上,一个完整的UDP通信模块应该是怎样的?
地址:http://www.17bianji.com/lsqh/38001.html
1/2 1