浅谈UDP协议的网络编程

        UDP协议是User Datagram Protocol的缩写,UDP与TCP相比,具有速度快的优点,缺点是不可靠,因此主要应用于一些实时性很强的引用场景中,比如网络游戏,视频会议等。UDP协议和TCP下面我们首先做一个简单的对比,然后我们通过两个模型来形象的说明两者之间的区别。


        TCP协议:可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。

        UPD协议:不可靠,差错控制开销较小,传输大小限制在64KB以下,不需要建立连接。


        有一个形象的比喻,如果将TCP比喻成打电话,那么电话线就是那条将两端连接起来的链路,而我们在电话必须经过如下三个步骤:1、先拨打对方的电话号码,向对方检查对方是否在线,第一次握手;2、如果对方电话在线则产生通话请求,第二次握手;3、对方电话铃响并按下接听键,通话建立,第三次握手;后面就可以开始正式通话了。


        而对于UDP呢,我们这里将它比喻成投递信件,这里我们忽略UDP比TCP快这个属性,只讨论逻辑上的比喻。投递信件时(客户端),我们将所有要说的话全写在信里(将所有的数据都转换成一个byte[ ]),然后用信封装起来(在生成DatagramPacket实例时必须传入这个byte[ ]),信封上必须写上收信人的地址和姓名,这个地址我们是事先通过查找知道的(在生成DatagramSocket的实例时必须传入服务器端的IP和端口),然后将这个信放入邮筒(建立DatagramSocket实例),等待邮差取走(调用send()方法),之后的事情我们就管不了了,我们不能确认对方一定能收到信件,因为投递不是即时的,首先投递的过程中存在着丢失的风险(路由的过程中的网络堵塞可能会丢包),然后收件人的地址可能发生了变化,而我们并不知道(服务器端的IP和端口号被占用或者发生了变化)。假设一起顺利,信件顺利到达目的地,收件人收到了信件(服务器端调用receive()方法),读到了信里的内容(byte[ ]进行解析),他需要对发件人进行回信,前面的操作和寄信相同,但是在信封上写收信人的地址和姓名时他事先并不知道,所以必须从寄过来的信封上得到(通过DatagramPacket的getSocketAddress()方法可以获取客户端的IP和端口),后面的过程于寄信过程并无差别,在此就不再赘述。


        所以说,对于UDP而言,其实并没有明确的服务器端和客户端,一般而言,固定IP地址、固定端口的DatagramSocket对象所在的程序被称为服务器端,因为该DatagramSocket可以主动接收客户端数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值