美文网首页
UDP-网络通信协议

UDP-网络通信协议

作者: 七喜丶 | 来源:发表于2021-09-09 13:27 被阅读0次
Java中的UDP通信
  • 介绍:

    1. UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
    2. Java提供了DatagramSocket类作为基于UDP协议的Socket
  • 特点:

    1. UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接
    2. 消耗系统资源小,通信效率高,大小有限制64k
  • 通信实现:

  1. 通信模型


    通信方法(重要
    方法名 说明
    DatagramSocket()(重要 创建数据报套接字并将其绑定到本机地址上的任何可用端口
    DatagramPacket(byte[] buf,int len,InetAddress add,int port)(重要 创建数据包,发送长度为len的数据包到指定主机的指定端口
    void send(DatagramPacket p) 发送数据报包
    void close() 关闭数据报套接字
    void receive(DatagramPacket p) 从此套接字接受数据报包
  2. 发送数据的步骤:
    无需事先建立连接,只需指明地址,将数据发送过去就可以了

    • 创建发送端的Socket对象(DatagramSocket)
    • 创建数据,并把数据打包
    • 调用DatagramSocket对象的方法发送数据
    • 关闭发送端

    代码展示

public class SendDemo {
    public static void main(String[] args) throws IOException {
        //创建发送端的Socket对象(DatagramSocket)
        // DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口
        DatagramSocket ds = new DatagramSocket();

        //创建数据,并把数据打包
        //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        //构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
        byte[] bys = "hello,我来了".getBytes();

        DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("127.0.0.1"),10086);

        //调用DatagramSocket对象的方法发送数据
        //void send(DatagramPacket p) 从此套接字发送数据报包
        ds.send(dp);

        //关闭发送端
        //void close() 关闭此数据报套接字
        ds.close();
    }
}
//UDP(用户数据报)协议,其中数据报是网络传输的基本单元,包含一个报头(Header)和数据本身,其中报头中包含了目的地地址
  1. 接收数据的步骤:

    • .使用DatagramSocket对象接收数据报
    • 从DatagramPacket对象中取出数据
    • 释放资源
public class ServerDemo {
    public static void main(String[] args) throws IOException {
      //创建DatagramSocket对象对应正确端口
        DatagramSocket ds = new DatagramSocket(10086);
      //创建DatagramPacket对象接收数据报
        DatagramPacket ap = null;
        while (true) {
            byte[] bytes = new byte[1024];
            ap = new DatagramPacket(bytes, bytes.length);
          //接收数据
            ds.receive(ap);
            System.out.println(new String(ap.getData(), 0, ap.getData().length));
        }
    }
}
  1. UDP三种通信方式:
    单播:用于两个主机之间的端对端通信

组播:用于对一组特定的主机进行通信

  • 广播:用于一个主机对整个局域网上所有主机上的数据通信

  1. 组播实现:
    组播地址:224.0.0.0~239.255.255.255
    其中:224.0.0.0~224.0.0.255为预留组播地址
    //client端(客户)
    public class ClinetDemo {
        public static void main(String[] args) throws IOException {
            DatagramSocket ds = new DatagramSocket();
            String s = "hello 组播";
            byte[] bytes = s.getBytes();
            InetAddress address = InetAddress.getByName("224.0.1.0");
            int port = 10000;
            DatagramPacket dp = new         
            DatagramPacket(bytes,bytes.length,address,port);
            ds.send(dp);
            ds.close();
        }
    }
    
    //server端(服务)
    public class ServerDemo {
    public static void main(String[] args) throws IOException {
        MulticastSocket ms = new MulticastSocket(10000);
        DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
        //把当前计算机绑定一个组播地址,表示添加到这一组中.
        ms.joinGroup(InetAddress.getByName("224.0.1.0"));
        ms.receive(dp);
        byte[] data = dp.getData();
        int length = dp.getLength();
        System.out.println(new String(data,0,length));
        ms.close();
    }
    

}
```

主要
组播与单播和广播的不同点是在于服务端的处理:
组播的服务端是new MulticastSocket()对象并且使用了joinGroup()方法
new MulticastSocket():其作用与DatagramSocket()大致相同
joinGroup():是把组播地址分为一组接收此地址的数据包

  1. 广播实现:
    广播地址:255.255.255.255
    //client(客户)
    public class ClientDemo {
        public static void main(String[] args) throws IOException {
            DatagramSocket ds = new DatagramSocket();
            String s = "广播 hello";
            byte[] bytes = s.getBytes();
            InetAddress address = InetAddress.getByName("255.255.255.255");
            int port = 10000;
            DatagramPacket dp = new       
            DatagramPacket(bytes,bytes.length,address,port);
            ds.send(dp);
            ds.close();
      }
    }
      //server (服务)
    public class ServerDemo {
        public static void main(String[] args) throws IOException {
            DatagramSocket ds = new DatagramSocket(10000);
            DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
            ds.receive(dp);
            byte[] data = dp.getData();
            int length = dp.getLength();
            System.out.println(new String(data,0,length));
            ds.close();
        }
    }
    

相关文章

  • UDP-网络通信协议

    Java中的UDP通信 介绍:UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两...

  • Redis 协议简单研究

    1.Redis网络通信协议 Redis底层网络通信协议其实是通过TCP来完成的。 2.Redis通信协议 Redi...

  • (二)网络编程之各种协议

    TCP和UDP 1.网络通信协议 网络通信协议:为什么要有网络通信协议呢?就好比在现实中要有法律法规一样,这样才能...

  • Java基础——网络编程

    网络基础知识 通信协议 计算机网络中实现通信必须有一些约定,这些约定称为通信协议。通信协议负责对传输速率、传输代码...

  • 网络编程

    今日介绍内容 1、网络通信协议 2、UDP通信 3、TCP通信 第一章 网络通信协议 通过计算机网络可以使...

  • 网络编程(详细)

    网络通信协议 网络通信协议:通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要...

  • 史上最简单的Sockte通信--1

    Socket,是基于网络通信协议封装的一个网络通信接口,可以支持TCP或UDP通信协议。通常是应用于TCP协议,这...

  • Web初体验--Socket网络编程

    java网络编程基础知识 通信协议:计算机网络中实现通信必须有一些约定,即通信协议。对速率、传输代码、代码结构、传...

  • Day13 通信协议、cookie

    通信协议 通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。 在计算机通信中,通信协议用于实现计算机与网络...

  • 网络通信协议

    1.网络协议 是什么? 数据进行交换(传输)遵循的一种特定格式的约定 做什么? 计算机之间通信 协议组成要素 ①语...

网友评论

      本文标题:UDP-网络通信协议

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