Android探秘之——UDP通信

一、初识通信

       说起来接触计算机以及各种操作系统也有一年多了,对专业内的知识有了一点自己的理解,在于把专业知识类比到生活里可以见到的各种各样事物上面去,复杂的原理呀算法呀都要容易理解多了。那么说回到今天的重点在于UDP通信,通信是什么呢,您可能都有这个体验,不论是手机也好电脑也好,连上网了这东西才像有了活力一样,哪怕是玩个单机游戏还有个NPC不是?所以要让我们的手机变得有意思起来,就要让使用者能和使用的程序有交互,有交互那么避免不了的要和外界去传送个悄悄话,那就涉及到我们要讲的通信机制了。

二、有关UDP

       那么今天的主角UDP,又是一种什么样的通信机制呢。首先考虑一个问题,如果在河东有一些村庄,在河西也有一些村庄,河上搭建了一些小桥供村庄之间运送货物,那么运送的时候就会有两种情况出现,一种是运送的人想尽可能快地去运送货物,那么怎么办呢,从河东的一个村庄中取到货物,并找到某一个小桥,“嘿!走你”,扔到桥上就跑了,到村庄里继续拿货物并且扔到桥上,这就是我们今天说的UDP通信;另外一种就比较认真负责了,运送的人拿到了要运送的货物,走到其中一个桥上,对着对面问 “嘿!我这里是从Ai村送到Bj村的货物,你是Bj村的吗”如果两方的人确实都是这批货物的发送方和接收方,那么我们才会放心地把货物交到对面,这是TCP/IP通信的大概原理,不过今天不会说。

       那么我们说回到UDP,这种通信机制的全称是User Datagram Protocol,也就是“用户数据报协议”。看到这个名字就应该很清楚啦,如果我们要在用户之间传送信息,那么就要通过数据报的形式来传送,由于我之前没接触过网络通信这一块,所以一直对“协议”这个名词不太理解,不过现在就好理解多了嘛,我发出的数据或者信息,对方至少要能解析,这样传送才有意义,否则我发给对方的东西对方都看不懂,或者说我发给他的小礼物他甚至都不知道怎么打开,这样和没传送的效果是一样的嘛。

三、深入了解UDP

        根据前面提到的内容,可以知道UDP这种通信方式也太不安全啦,也不知道有没有连接,就把数据丢出去了,也不能确定对方是不是能收到,是这样没错,但凡事都有利有弊,一把双刃剑直戳要害,虽然UDP不稳定,但是突出了一个特点在于“快”,基于UDP的通信特点,有的时候我们可能会选择这种不是很安全但是很快速的方法,毕竟有些数据丢了就丢了嘛,又不是所有的信息都会是有效信息

       在开发应用的时候,考虑到UDP的以下几点优点,我们可能会优先考虑使用UDP通信:

  • 对于数据传送时间的精确把握:只要我们的应用进程将需要发送的信息传递给UDP,UDP就会将数据打包成数据报的形式并且立即传送到网络,实时传送的特点展现的淋漓尽致
  • 不需要建立连接:虽然还没介绍到TCP,但是有些同学可能知道TCP的“三次握手”,而UDP避免了这个过程产生的时延,既然要快,那么当然不会在这种事情上多做耽搁
  • 不需要维持连接状态:如前面所说,既然TCP足够安全,那么这种安全状态是需要进行维护的,如果在传送的过程中一直在查看各种参数是否正常、确认端口连接状态的话,这样很明显是需要花费一定时间的。

       而且虽然UDP没有那么可靠,但可靠与不可靠都是相对而言,UDP也可以实现可靠通信,怎么实现呢,就好像在学校的通知群里下发通知,都会加上一句“收到请回复”,如果你已经回复我“收到”了,那么也就是说明你已经收到了我的信息,至于收到信息之后还有什么行动,是与我发送人无关的。UDP也可以实现这样的可靠通信,比如Android端作为客户端,向服务器端发送一条消息,客户端怎么知道消息已经发到服务器端了呢?服务器端收到消息之后再发送一条消息给客户端就好啦,如果没收到的话,那么客户端就会重复地发送几次这条消息,“嘿!你在不在?”可是如果服务器一直不应答可怎么办,又不能把时间都花费在问服务器在不在这里,所以可以设定一个询问次数,问你三次在不在都不理我那我只好找别人去玩咯

四、一些细节

       如果我们要实现通信的话,首先要知道ip地址和端口号(之前对于网络涉及不多,如果这里有错的话再进行改正),对于客户端和服务器端来说,首先要确定一个DatagramSocket,也就是传输的端口,如果是在前面的例子上说的话,就是发货的人和收货的人应该都在同一座桥上。然后我们要将需要传送的数据转换成byte格式,这是协议规定的,数据报中的内容都是以byte格式存储的,转换之后将byte格式的数据存储到DatagramPacket中,也就是我们说了很多次的数据报,之后调用DatagramSocket的send方法,将我们打包好的数据报发送到端口中,如果服务器端也连接到这个端口的话,那么发出的数据报就会被接收。如果想要实现可靠性通信,还可以在服务器端从数据报中获取到客户端的地址,重新调用send方法,就会返回给客户端一条消息,确认成功发送。

        关于UDP通信机制就先说这么多,所学所见有限,难免出现纰漏,日后再加改进~

猜你喜欢

转载自blog.csdn.net/LieberVater/article/details/86653208