首页 > 编程语言 >Java基础 UDP协议下,收发数据的代码实现

Java基础 UDP协议下,收发数据的代码实现

时间:2024-03-30 17:22:45浏览次数:23  
标签:DatagramSocket UDP DatagramPacket Java 端口 收发 端口号 发送数据 dp

一、发送数据步骤:

1. 创建DatagramSocket对象,负责利用UDP协议往外发送数据(DatagramSocket中既有发送的方法,也有接收的方法)

2. 把数据打包(DatagramPacket)。把所有数据放到DatagramPacket当中

3. 发送数据

4. 释放资源

 

代码实现:

public static void main(String[] args) throws Exception {
// 1. 创建DatagramSocket对象
// 细节:创建DatagramSocket对象的时候,它还会去绑定对应的端口,以后我们就是通过这个端口往外发送数据。如果是空参构造,会在所有可用的端口中随机一个
DatagramSocket ds = new DatagramSocket();
// 2. 打包数据
String str = "你好啊";
byte[] bytes = str.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 10086;
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
// 3. 发送数据
ds.send(dp);
// 4.释放资源
ds.close();
}

我DatagramSocket不是空参构造吗,它随机一个端口。那我后面为什么还要指定一个10086端口?

答:在上述代码中,虽然你使用了 DatagramSocket 的空参构造方法创建了一个 DatagramSocket 对象,但在创建 DatagramPacket 对象时,你指定了目标地址和端口号。这个端口号是目标主机(这里是 127.0.0.1)上等待接收数据的端口号,而不是发送数据的端口号。
即使 DatagramSocket 的构造方法随机选择了一个本地端口来发送数据,但在 DatagramPacket 中指定了目标地址和端口,这确保了数据将被发送到指定的目标地址和端口,而不是随机选择的端口。因此,即使你没有明确指定发送数据的端口号,你仍然需要指定接收数据的目标端口号,以确保数据被正确路由到目标主机上的正确端口。

------------------------------------------------------------------------------------------------

二、接收数据步骤:

1. 创建DatagramSocket对象,负责利用UDP协议接收数据(DatagramSocket中既有发送的方法,也有接收的方法)

2. 接收打包好的数据

3. 解析数据包

4. 释放资源

 

代码实现:

public static void main(String[] args) throws Exception {
// 1. 创建DatagramSocket对象
// 细节:在接收的时候,一定要绑定端口,而且绑定的端口一定要跟发送的端口保持一致
DatagramSocket ds = new DatagramSocket(10086);
// 2. 接收数据包
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp); // receive方法是阻塞的,就是程序执行到这一步的时候,它会在这里死等,等发送端发送消息
// 3. 解析数据包
byte[] data = dp.getData();
int length = dp.getLength();
InetAddress address = dp.getAddress();
int port = dp.getPort();
System.out.println("接收到数据" + new String(data, 0, length));
System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个端口发出的");
// 4. 释放资源
ds.close();
}

 

标签:DatagramSocket,UDP,DatagramPacket,Java,端口,收发,端口号,发送数据,dp
From: https://www.cnblogs.com/gagaya2/p/18105766

相关文章

  • 一文搞懂Javaweb的响应状态码
    一、状态码大类状态码分类说明1xx响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它2xx成功——表示请求已经被成功接收,处理已完成3xx重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。4xx客户端......
  • JavaScript笔记 09
    目录01DOM操作事件的体验02获取元素对象的五种方式03事件中this指向问题04循环绑定事件05DOM节点对象的常用操作  06点亮盒子的案例07节点访问关系08设置和获取节点内容的属性09以上内容的小总结 01DOM操作事件的体验        js本身是受......
  • java:包装类
    java是面向对象的编程语言,而基本数据类型并不是对象,于是java对基本数据类型包装了对应的类,如int-Integer、char-Character等,这些类称之为包装类。一、包装类用于泛型何为泛型?实例化一个对象,就是开辟一块空间用于存储对象的属性,Java是强类型编程语言,在声明属性时,需要指定属性......
  • 总结UDP协议各类知识点
    前言本篇博客博主将详细地介绍UDP有关知识点,坐好板凳发车啦~一.UDP特点1.无连接UDP传输的过程类似于发短信,知道对端的IP和端口号就直接进行传输,不需要建立连接;2.不可靠传输没有任何的安全机制,发送端发送数据报以后,如果因为网络故障该段无法发送到对方,UDP协议层也不会给应......
  • Java(2) ----- 异常、多线程、同步安全、死锁、并发包、Lambda表达式、Stream流
    异常方法默认都可以自动抛出运行时异常!自定义异常:(1)自定义编译时异常1、定义一个异常类继承Exception2、重写构造器3、在出现异常的地方用thrownew自定义对象抛出4、编译时异常是编译阶段就报错,提醒跟家强烈,一定需要处理!(2)自定义运行时异常1、定义一个异常类继承RunTimeE......
  • 以太网:UDP包结构
    参考:UDP协议报文结构_udp报文结构-CSDN博客千兆以太网(3):接收——包校验和数据筛选-咸鱼IC-博客园(cnblogs.com)计算机网络·啥玩意是源MAC地址,目标MAC地址,源ip地址,目标ip地址_目的mac地址和源mac地址-CSDN博客数据的校验和筛选仅供参考帧首部:7个h55+hd5MAC首部:目的MA......
  • 【全开源】JAVA上门家政服务系统源码微信小程序+微信公众号+APP+H5_博纳软云
    上门家政服务系统源码微信小程序——让便捷服务触手可及在现代社会,家政服务的需求日益增长,而如何快速、便捷地找到优质的家政服务成为了许多家庭关注的焦点。为此,我们推出了上门家政服务系统源码微信小程序,让便捷服务触手可及。这款微信小程序不仅集成了丰富的家政服务资源,还......
  • 【全开源】JAVA语聊大厅+陪玩系统语音聊天APP系统源码_博纳软云
    JAVA语聊大厅+陪玩系统语音聊天APP系统源码,融合了先进的JAVA技术和独特的陪玩系统,为用户带来了全新的语音社交体验。该系统源码不仅具备JAVA语言的高效稳定特性,还通过陪玩系统的引入,让用户在享受语音聊天的乐趣之余,更能找到心仪的玩伴,一同畅游在精彩的游戏世界。在语聊大厅中,......
  • 基于JavaWeb的家居商城系统的设计与实现论文
    摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于家居商城系统当然也不能排除在外,随着网络技术的不断成熟,带动了家居商城系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个性化的平......
  • 【JavaScript系列】-- 对象
    今天我们将探讨JavaScript中的一个强大工具—-对象。对象就像生活中的各种工具,帮助你更好地组织和管理信息。在实际开发中,可以使用对象来表示用户信息、处理表单数据等。01、什么是对象JavaScript对象是一种包含属性和方法的数据类型,可视为一个多功能盒子,用于存放各种数据。在......