【Java 网络编程】UDP API 简介 ( DatagramSocket | DatagramPacket )

简介: 【Java 网络编程】UDP API 简介 ( DatagramSocket | DatagramPacket )

I DatagramSocket


DatagramSocket 类简介 : 负责 UDP 数据的发送和接收 , 该类没有合并到 Socket API 中 , 因为在 Socket 协议中 , 必须要存在服务器端与客户端 , 在 UDP 中 , DatagramSocket 既是服务器又是客户端 , 其不需要监听端口 , 也不需要建立连接 ;




II DatagramSocket 构造方法


DatagramSocket 构造方法 :


① DatagramSocket() : 创建对象 , 不指定监听的端口与 IP 地址 ; 使用该对象发送 UDP 数据 , 其会自动寻找可用的端口 , 将数据发送出去 ;

② DatagramSocket(int port) : 创建对象 , 该 Socket 会监听固定端口 ; 注意该端口是用于监听数据接收的 ; 发送数据使用的不是该端口号 ;

③ DatagramSocket(int port , InetAddress localAddr) : 创建对象 , 该对象监听固定端口与指定的 IP 地址 ; 如果计算机本地有多个 IP 地址 , 此时就可以指定只监听某个 IP 地址的端口 ;



III DatagramSocket 数据操作


1. 接收数据方法 : receive( DatagramPacket dp ) : 接收数据 ;


2. 发送数据 : send( DatagramPacket dp ) : 发送数据 ;


3. 设置超时时间 : setSoTimeout ( int timeout ) : 设置超时时间 , 单位毫秒 ;


4. 释放资源 : close() ;




IV DatagramPacket


DatagramPacket : 用于处理报文 , 其封装了发送的信息 byte[] 数组 , 目标 IP 地址 , 目标端口号等信息 , 封装成报文 ; 也可以将报文拆解成 byte[] 数组信息 ; 该类时 UDP 数据的发送和接收的实体 ;




V DatagramPacket 构造方法


DatagramPacket 构造方法 :


① DatagramPacket ( byte[] buffer , int offset , int length , InetAddress addr , int port ) : 其中 offset 和 length 指定了 buffer 数组的可用区间 ; 后面的两个参数指定目标设设备的 IP 地址与端口号 ; 该 IP 地址和端口仅在发送时有效 ;

② DatagramPacket ( byte[] buffer , int offset , int length , SocketAddress address ) : 前三个参数用于制定要发送的 byte[] 数组信息 , SocketAddress 中封装了 IP 地址和端口号 ;



VI DatagramPacket 设置参数


DatagramPacket 设置数据 :


① setData ( byte[] buffer , int offset , int length ) , 如果在构造函数中没有设置数据 , 或者想要替换发送的数据 , 可以调用该方法设置要发送的数据 ;

② setData ( byte[] buffer) : 设置整个 byte[] 数组作为要发送的数据 ;

③ setLength ( int len ) : 设置数据有效区间 ;

④ setAddress ( InetAddress addr ) : 设置接受数据目标的地址 ; 注意这个 IP 地址发送时有效 , 接收时无效 ;

⑤ setPort ( int port ) : 设置接收数据的端口号 ; 注意这个端口号发送时有效 , 接收时无效 ;

⑥ setSocketAddress ( SocketAddress address ) : 设置 IP 地址 + 端口号数据 ;



VII DatagramPacket 获取参数


DatagramPacket 获取数据 :


① getData() : 获取发送或接受的数据 ;

② getOffset() : 获取 byte[] 数组数据有效数据的开始位置 ;

③ getLength() : 获取 byte[] 数组数据的有效长度 ;

④ getAddress() : 获取 IP 地址信息 ;

⑤ getPort() : 获取端口号信息 ;

⑥ getSocketAddress ( SocketAddress address ) : 获取 IP 地址 + 端口号数据 ;



VIII DatagramPacket IP 地址 端口号 说明


关于 DatagramPacket 的 IP 地址和端口号说明 : 这个 IP 地址和端口号仅在发送时是有效的 , 接收时是无效的 , 在接收到数据时 , IP 地址和端口号是系统解析完报文后 , 自动设置到 DatagramPacket 对象中的 , 仅用于说明该数据是由哪个设备的 IP 地址和端口号发送的 ;



目录
相关文章
|
7月前
|
JSON 移动开发 网络协议
Java网络编程:Socket通信与HTTP客户端
本文全面讲解Java网络编程,涵盖TCP与UDP协议区别、Socket编程、HTTP客户端开发及实战案例,助你掌握实时通信、文件传输、聊天应用等场景,附性能优化与面试高频问题解析。
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
277 1
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
295 1
|
8月前
|
人工智能 安全 Java
Go与Java泛型原理简介
本文介绍了Go与Java泛型的实现原理。Go通过单态化为不同类型生成函数副本,提升运行效率;而Java则采用类型擦除,将泛型转为Object类型处理,保持兼容性但牺牲部分类型安全。两种机制各有优劣,适用于不同场景。
352 24
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
648 29
JVM简介—1.Java内存区域
|
8月前
|
人工智能 Java
java中static关键字简介
`static`关键字用于修饰类的成员变量和方法,使其属于类而非对象。静态成员可通过类名直接访问,无需实例化对象。静态方法只能访问静态成员,不能直接访问非静态成员或使用`this`关键字。此外,静态代码块在类首次加载时执行且仅执行一次,适用于初始化操作。
226 0
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
530 23
|
Java Linux API
课时3:Java简介(Java主要特点)
本文介绍了Java的主要特点及其运行机制。Java结合了编译型和解释型语言的优点,通过Java虚拟机(JVM)实现跨平台移植,简化了不同操作系统间的开发流程。Java的特点包括可移植性、简单易用、支持多线程编程、自动垃圾收集和面向对象编程。随着硬件技术的发展,Java的性能问题已大大改善,成为行业标准之一,广泛应用于各种商用平台开发。
347 1
|
网络协议 算法 安全
Go语言的网络编程与TCP_UDP
Go语言由Google开发,旨在简单、高效和可扩展。本文深入探讨Go语言的网络编程,涵盖TCP/UDP的基本概念、核心算法(如滑动窗口、流量控制等)、最佳实践及应用场景。通过代码示例展示了TCP和UDP的实现,并讨论了其在HTTP、DNS等协议中的应用。最后,总结了Go语言网络编程的未来发展趋势与挑战,推荐了相关工具和资源。
394 5
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。