• JAVA学习之网络编程UDP篇


     

    DatagramSocket
    构造方法摘要,总共有5个构造方法
    DatagramSocket()
    构造数据报套接字并将其绑定到本地主机上任何可用的端口。

    DatagramSocket(DatagramSocketImpl impl)
    创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。

    DatagramSocket(int port)
    创建数据报套接字并将其绑定到本地主机上的指定端口。

    DatagramSocket(int port, InetAddress laddr)
    创建数据报套接字,将其绑定到指定的本地地址。

    DatagramSocket(SocketAddress bindaddr)
    创建数据报套接字,将其绑定到指定的本地套接字地址。

    常用方法是
    close()
    关闭此数据报套接字。

    receive(DatagramPacket p)
    从此套接字接收数据报包。

    send(DatagramPacket p)
    从此套接字发送数据报包。

    其中接收和发送的时候,涉及到类DatagramPacket,
    DatagramPacket有6个构造方法,其中常用的两个构造方法是

    DatagramPacket(byte[] buf, int length)
    构造 DatagramPacket,用来接收长度为 length 的数据包。

    DatagramPacket(byte[] buf, int length, InetAddress address, int port)
    构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

    基于UDP通信的基本模式,最简单的模式,使用方法步骤如下
    1.将数据打包(DatagramPacket),然后发送出去
    2.接收别人的发来的数据包(DatagramPacket),然后查看数据包

    其中发送数据包时的步骤
    (1).使用DatagramSocket()方法创建一个套接字
    (2).使用DatagramPacket(byte[] buf, int length, InetAddress address, int port) 打包要发送的数据
    (3).使用DatagramSocket类的send(DatagramPacket p) 发送数据包

    其中接收数据包时的步骤
    (1).使用DatagramSocket(int port) 方法创建一个套接字,其中port说明这个套接节直接绑定到指定端口上
    (2).使用DatagramPacket(byte[] buf, int length) 方法创建一个来用接收数据包的数据包
    (3).使用DatagramPacket类的receive(DatagramPacket p) 方法为数据包接收数据

    注:DatagramPacket与DatagramSocket位于java.net包中,所以使用的时候要记得先
    导入这个包,而且在连接创建的过程中会出现各种异常,记得做异常处理

    下面写一个练习代码,其中这两个类分别对对方接收和发送信息

    其中一个类的代码

    //
    import java.net.*;
    public class UdpA {
    public static void main(String[] args) throws Exception {
    // 其中发送数据包时的步骤
    // (1).使用DatagramSocket()方法创建一个套接字
    // (2).使用DatagramPacket(byte[] buf, int length, InetAddress address, int
    // port) 打包要发送的数据
    // (3).使用DatagramSocket类的send(DatagramPacket p) 发送数据包
    DatagramSocket socket = new DatagramSocket();// 这里可以不用绑定端口,由系统自动分配
    byte[] buf = "您好,我是UdpA,很高兴认识你".getBytes();
    // 我们把数据包要发送到是IP和端口分别是本机的Ip和10000端口
    DatagramPacket packetSend = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000);
    socket.send(packetSend);
    //接收数据
    DatagramPacket packetBack = new DatagramPacket(new byte[1024], 1024);
    socket.receive(packetBack);
    System.out.println("对方发来的信息为:" + (new String(packetBack.getData(), 0, packetBack.getLength())));
    socket.close();
    }
    }

    这个是另一个类的代码

    //
    import java.net.*;
    public class UdpB {
    /**
    * UdpB先接收数据,然后回发数据 连接创建的过程中会出现各种异常,记得做异常处理
    *
    * @param args
    * @throws Exception
    */
    public static void main(String[] args) throws Exception {
    // 接收数据包时的步骤
    // (1).使用DatagramSocket(int port) 方法创建一个套接字,其中port说明这个套接节直接绑定到指定端口上
    // (2).使用DatagramPacket(byte[] buf, int length) 方法创建一个来用接收数据包的数据包
    // (3).使用DatagramPacket类的receive(DatagramPacket p) 方法为数据包接收数据
    DatagramSocket socket = new DatagramSocket(10000);// 绑定UdpB的端口为10000
    System.out.println("UdpB开启了");
    DatagramPacket packetRecevice = new DatagramPacket(new byte[1024], 1024);
    socket.receive(packetRecevice);
    String ip = packetRecevice.getAddress().getHostAddress();// 取得发送方的IP
    int port = packetRecevice.getPort();// 取得发送方的端口
    String data = new String(packetRecevice.getData(), 0, packetRecevice.getLength());// 取得发送过来的数据
    System.out.println("接收到的数据为:" + data + " 其中发送方的IP为:" + ip + " 端口为:" + port);// 打印接收到的数据
    // 然后再发一个信息到对方
    byte[] msg = "Hello,我就是UdpB哦".getBytes();
    // 根据上面取得的对方的IP和端口,我们把信息反馈回去
    DatagramPacket packetBack = new DatagramPacket(msg, msg.length, InetAddress.getByName(ip), port);
    socket.send(packetBack);
    // 最后关闭套接字
     socket.close();
    }
    }

    好吧,一边看书一边看视频,还要一边练代码,进度好慢啊.

  • 相关阅读:
    mysql显示乱码
    aws常用命令
    Hive分析窗口函数(一) SUM,AVG,MIN,MAX
    Hive函数介绍
    Apache Drill 调研学习
    公有云与私有云对比分析报告
    python3 使用libvirt 相关安装
    libvirt虚拟库
    Reveal CocoaPods的使用
    AFNetworking 2.0 使用
  • 原文地址:https://www.cnblogs.com/fylx/p/3957960.html
Copyright © 2020-2023  润新知