美文网首页
UDP协议详解

UDP协议详解

作者: 适量哥 | 来源:发表于2017-05-24 23:48 被阅读440次

    UDP 简称 User Datagram Protocol (用户数据报协议),是一种无连接、不可靠的协议,每个数据报都是一个独立的信息,每个被传输的数据报很小(限定在 64k 以下),位于传输层 ( ip 位于网络层 ) 。而且 UDP 协议是不分客户端和服务端,只分发送端和接收端。因为 UDP 协议是面向无连接的,所以速度很快,但会出现数据包丢失。一般用于视频聊天、网络游戏等实时性较高的情况。

    简单的 UDP 程序

    发送者

    public class UdpSender {
    
        public static void main(String[] args) throws IOException {
            //首先创建一个DatagramSocket对象
            DatagramSocket socket = new DatagramSocket();
            //创建一个InetAddree
            InetAddress serverAddress = InetAddress.getByName("127.0.0.1");
            String str = "Hello World!";  //这是要传输的数据
            byte data[] = str.getBytes();  //把传输内容分解成字节
            //创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号
            DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, 4567);
            //调用socket对象的send方法,发送数据
            socket.send(packet);
        }
    }
    

    接收者

    public class UdpReceiver {
    
        public static void main(String[] args) throws IOException {
            //创建一个DatagramSocket对象,并指定监听的端口号
            DatagramSocket socket = new DatagramSocket(4567);
            while (true) {
    
                //如果发送过来的数据大于1024字节,那么将接收不完整
                byte data[] = new byte[1024];
                //创建一个空的DatagramPacket对象
                DatagramPacket packet = new DatagramPacket(data, data.length);
                //使用receive方法接收客户端所发送的数据,
                //如果客户端没有发送数据,该进程就停滞在这里
                socket.receive(packet);
                String result = new String(packet.getData(), packet.getOffset(), packet.getLength());
                System.out.println(packet.getAddress().getHostName() + " result---> " + result);
            }
        }
    }
    

    丢包的原因

    1. 带宽不足

    2. cpu 处理不过来

    传输层和网络层有什么不同

    网络层: 提供点到点的连接,即提供主机之间的逻辑通信。 传输层: 提供端到端的连接,即进程之间的逻辑通信。

    相关文章

      网友评论

          本文标题:UDP协议详解

          本文链接:https://www.haomeiwen.com/subject/dpkaxxtx.html