zoukankan      html  css  js  c++  java
  • 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();
    }
    }

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

  • 相关阅读:
    LeetCode 8 有效的括号
    String源码学习
    LeetCode 7最长公共前缀
    LeetCode 5回文数
    LeetCode 6罗马数字转整数
    LeetCode 4.反转整数
    LeetCode 3.无重复字符的最长子串
    区分子串和子序列
    LeetCode 1.两数之和
    一个十分好用的动画工具:Velocity.js
  • 原文地址:https://www.cnblogs.com/fylx/p/3957960.html
Copyright © 2011-2022 走看看