UDP协议详解

2017-05-24  本文已影响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 处理不过来

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

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

上一篇下一篇

猜你喜欢

热点阅读