教育路上

全国站>Java>网络编程>UDP 网络程序案例
学员需求

UDP 网络程序案例

摘要:Java UDP 网络程序 案例 ,讲解了 DatagramPacket 和 DatagramSocket 的作用,接下来通过一个案例 来学习。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。

2022-05-18 16:39网络推荐

发布时间:
2022-05-18 16:39
信息来源:
网络推荐
浏览次数:
1300
UDP 网络程序案例

前面两个小节讲解了 DatagramPacket 和 DatagramSocket 的作用,接下来通过一个案例 来学习一下它们在程序中的具体用法。要实现 UDP 通信需要创建一个发送端程序和一个接 收端程序,很明显,在通信时有接收端程序先运行,才能避免发送端发送的数据无法接收。 而造成数据丢失。因此,首先需要来完成接收端程序的编写,如例 13-2 所示。 例 13-2 Example02.java import java.net.*; // 接收端程序 public class Example02 { public static void main(String[] args) throws Exception { byte[] buf = new byte[1024]; // 创建一个长度为 1024 的字节数组, 用于接收数据 // 定义一个 DatagramSocket 对象,监听的端口号为 8954 DatagramSocket ds = new DatagramSocket(8954); // 定义一个 DatagramPacket 对象,用于接收数据 DatagramPacket dp = new DatagramPacket(buf, 1024); System.out.println("等待接收数据"); ds.receive(dp); // 等待接收数据,如果没有数据则会阻塞 // 调用 DatagramPacket 的方法获得接收到的信息,包括数据的 内容、长度、发送的 IP 地址和端口号 String str = new String(dp.getData(), 0, dp.getLength()) + "from " + dp.getAddress().getHostAddress() + ":" + dp.getPort(); System.out.println(str); // 打印接收到的信息 ds.close();// 释放资源 } } 运行结果图 13-7 所示

from shengerguan

例 13-2 创建了一个接收端程序用来接收数据,在创建 DatagramSocket 对象时,指定其 监听的端口号为 8954,这样发送端就能通过这个端口号与接收端程序进行通信。之后创建 DatagramPacket 对象时传入一个大小为 1024 个字节的数组用来接收数据,当调用该对象的 receive( DatagramPacket p) 方法接收到数据以后,数据会填充到 DatagramPacket 中,通过 DatagramPacket 的相关方法可以获取接收到的数据信息。 从图 13-7 可以看到,例 13-2 运行后,程序一直处于停滞状态,命令行窗口中光标一直闪 动,这是因为 DatagramSocket 的 receive( )方法在运行时会发生阻塞,只有接收到发送端程 序发送的数据时,该方法才会结束这种阻塞状态,程序才能继续向下执行 实现了接收端程序之后,接下来还需要编写一个发送端的程序,如例 13-3 所示 例 13-3 Example03.java //发送端程序 import java.net.*; //发送端程序 public class Example03 { public static void main(String[] args) throws Exception { // 创建一个 DatagramSocket 对象 DatagramSocket ds = new DatagramSocket(3000); String str = "hello world"; // 要发送的数据 DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("localhost"), 8954); System.out.println("发送信息"); ds.send(dp); // 发送数据 ds.close(); // 释放资源 } } 运行结果如图 13-8 所示。

from shengerguan

例 13-3 创建了一个发送端程序,用来发送数据。在创建 DatagramPacket 对象时需要指 定目标 IP 地址和端口号,而且端口号必须要和接收端指定的端口号一致,这样调用 DatagramSocket 的 send()方法才能将数据发送到对应的接收端。 在接收端程序阻塞的状态下,运行发送端程序,接收端程序就会收到发送端发送的数据 而结束阻塞状态,打印接收的数据如图 13-9 所示。

from shengerguan

需要注意的时,在创建发送端的 DatagramSocket 对象时,可以不指定端口号,而例 13-3 指定端口号的目的就是,为了每次运行时接收端的 getPort()方法返回值都是一致的,否则发 送端的端口号由系统自动分配,接收端的 getPort()方法的返回值每次都不同。  脚下留心 需要注意的是,运行例 13-2,有时会出现一种异常,如图 13-10 所示

from shengerguan

端口号已经被其他的程序占用。遇到这种情况,可以在命令行窗口输入"netstat-anb"命令来 查看当前计算机端口占用情况,运行结果如图 13-11 所示。

from shengerguan

图 13-11 中,显示了所有正在运行的应用程序及它们所占用的端口号。想要解决端口号 占用的问题,只需关掉占用端口号的应用程序或者为程序分配一个未被占用的端口号即可

上一篇:
DatagramSocket
下一篇:
UDP 案例—聊天程序
标签:
网友评论
发布评论

访客的评论 2024/05/08 20:00

文中描述的是准确的吗,如何报名!

相关推荐
我也来发表评价关闭
我对该内容的评价:
0
评价500
验证码: 看不清 换一张
提交 (匿名发布,无须担心别人知道您的身份)
学校免费发布信息关闭
我们审核后会尽快展示,如有图片请发邮件到:edu63@foxmail.com

姓      名:

内      容:

手机号码:

验  证  码:  换一张

确认提交
填写需求信息关闭
我们会根据您的需求匹配并审核留言

姓      名:

意向城市:

留      言:

手机号码:

验  证  码:  换一张

确认提交
完善补充本文信息关闭
非常感谢您帮助完善补充本文信息


 换一张

确认提交