欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > java —— 网络编程(UDP)

java —— 网络编程(UDP)

2024/10/24 17:20:08 来源:https://blog.csdn.net/firstgrass/article/details/139961954  浏览:    关键词:java —— 网络编程(UDP)

一、InetAddress 类

InetAddress address1=InetAddress.getLocalHost();

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

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 进行发送或接收。

发送端示例:

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();//关闭资源
}

接收端示例:

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

发送端示例:

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();//关闭资源
}

接收端示例:

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 即表明向局域网内所有主机发送数据。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com