java —— 网络编程(UDP)

一、InetAddress 类

java 复制代码
InetAddress address1=InetAddress.getLocalHost();

该命令用于获取本机主机信息,返回主机名与 IP 地址,不过如果本机有多个网卡的话,返回的 IP 地址并不一定是目前正在联网的那个。

java 复制代码
InetAddress address2=InetAddress.getByName("DESKTOP-MINYU");
InetAddress address2=InetAddress.getByName("192.168.0.106");

该命令的参数可以是主机名,也可以是 IP 地址。当参数是主机名时,如果是本机主机名,则效果与**InetAddress.getLocalHost()**相同,也就是说返回的主机信息中的 IP 地址不一定是我们想要的。当参数是 IP 地址时,返回的就是输入的 IP 地址。

二、DatagramSocket 类

采用 UDP 通信的类为 DatagramSocket 类,其特点是事先不需要建立连接,发出去的数据对方能收到就收到,收不到拉倒。

在编写代码的时候需要用到 DatagramPacket 类,主要作用是对数据进行打包,然后交由 DatagramSocket 进行发送或接收。

发送端示例:

java 复制代码
public static void main(String args[])
{
    DatagramSocket ds=new DatagramSocket();
    //建立 Socket 对象,没有参数表明可以使用本机的任何端口进行发送。

    String x="hello";
    byte[] bytes=x.getBytes();
    InetAddress address=InetAddress.getByName("192.168.0.106");
    int port=10086;

    DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
    //打包数据,对方IP是192.168.0.106,对方端口号是10086.

    ds.send(dp);
    //发送数据

    ds.close();
    //关闭资源
}

接收端示例:

java 复制代码
public static void main(String args[])
{
    DatagramSocket ds=new DatagramSocket(10086);
    //建立 Socket 对象,用于接收本机10086端口的数据。

    byte[] bytes=new byte[1024];
    DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
    //打包数据,将后续接收到的数据打包进bytes字节数组里。

    ds.receive(dp);
    //接收数据

    byte[] x=dp.getData();
    int length=dp.getLength();
    //解析数据

    System.out.println(new String(x,0,length));
}

三、MulticastSocket 类

该类用于组播,替换单播的 DatagramSocket 类。

组播地址范围:224.0.0.0~224.0.0.255

发送端示例:

java 复制代码
public static void main(String args[])
{
    MulticastSocket ms=new MulticastSocket();
    //建立 Socket 对象,没有参数表明可以使用本机的任何端口进行发送。

    String x="hello";
    byte[] bytes=x.getBytes();
    InetAddress address=InetAddress.getByName("224.0.0.1");
    int port=10086;

    DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
    //打包数据,组播IP是192.168.0.106,对方端口号是10086.

    ms.send(dp);
    //发送数据

    ms.close();
    //关闭资源
}

接收端示例:

java 复制代码
public static void main(String args[])
{
    MulticastSocket ms=new MulticastSocket(10086);
    //建立 Socket 对象,用于接收本机10086端口的数据。

    InetAddress address=InetAddress.getByName("224.0.0.1");
    ms.joinGroup(address);
    //将本机套接字加入组播地址

    byte[] bytes=new byte[1024];
    DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
    //打包数据,将后续接收到的数据打包进bytes字节数组里。

    ms.receive(dp);
    //接收数据

    byte[] x=dp.getData();
    int length=dp.getLength();
    //解析数据

    System.out.println(new String(x,0,length));
}

四、广播

广播的代码实现与单播基本一样,只需要将地址改为 255.255.255.255 即表明向局域网内所有主机发送数据。

相关推荐
小小小米粒2 小时前
NAT 模式, 仅主机模式 Host-Only ,桥接模式 Bridge
linux·服务器·网络
无心水3 小时前
【OpenClaw:实战部署】5、全平台部署OpenClaw(Win/Mac/Linux/云服务器)——10分钟跑通第一个本地AI智能体
java·人工智能·ai·智能体·ai智能体·ai架构·openclaw
一只大袋鼠4 小时前
Redis 安装+基于短信验证码登录功能的完整实现
java·开发语言·数据库·redis·缓存·学习笔记
※DX3906※4 小时前
Java排序算法--全面详解面试中涉及的排序
java·开发语言·数据结构·面试·排序算法
cur1es5 小时前
【JVM类加载&双亲委派模型&垃圾回收机制】
java·jvm·gc·垃圾回收·类加载·双亲委派模型
Mr.朱鹏6 小时前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
焦糖玛奇朵婷6 小时前
实测扭蛋机小程序:开发简单,互动有趣
java·大数据·程序人生·小程序·软件需求
Nan_Shu_6146 小时前
学习: 尚硅谷Java项目之小谷充电宝(3)
java·后端·学习
头疼的程序员6 小时前
计算机网络:自顶向下方法(第七版)第三章 学习分享(二)
网络·学习·计算机网络
Blurpath住宅代理6 小时前
代理协议深度解析:HTTP与SOCKS5如何科学选型?
网络·静态ip·动态代理·住宅代理