【Java】网络编程--UDP网络通信编程

简介: 文章目录1 UDP网络通信编程原理1.1 UDP网络通信编程介绍1.2 UDP网络通信编程的基本流程2 UDP网络通信编程案例写在最后

1 UDP网络通信编程原理

1.1 UDP网络通信编程介绍

类 DatagramSocket 何 DatagramPacket(数据包/数据报) 实现了基于 UDP协议网络程序;

UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP数据报一定能够安全送达目的地,也不确定什么时候可以抵达;

DatagramPacket 对象封装了 UDP数据报,在数据报中包含了发送端IP地址和端口号,以及接收端的IP地址和端口号;

UDP协议中每个数据报都给出了完整的地址信息,因此无法建立发送方与接收方的连接。

没有明确的服务端和客户端,演变成数据的发送端和接收端;

接收数据和发送数据都是通过 DatagramSocket 对象完成。

1.2 UDP网络通信编程的基本流程

核心的两个类/对象,DatagramSocket与DatagramPacket;

建立发送端和接收端;

建立数据包;

调用DatagramSocket的发送和接收方法;

关闭DatagramSocket。

2 UDP网络通信编程案例

1.编写一个接收端A,一个发送端B;

2.接收端在 9999端口等待接收数据(receive);

3.发送端向接收端发送数据:“你好!接收端”;

4.接收端接收到发送端的数据后,回复:“你好!发送端”,再退出;

5.发送端接收回复的数据,退出。


UDPReceiverA

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 接收端A
 */
public class UDPReceiverA {
    public static void main(String[] args) throws IOException {
        //1.创建一个DatagramSocket对象,准备在9999接收数据
        DatagramSocket socket = new DatagramSocket(9999);
        //2.构建一个DatagramPacket对象,准备接收数据
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3.调用接收方法,将通过网络传输的 DatagramPacket对象 填充到 packet对象
        System.out.println("接收端A 等待接收数据...");
        socket.receive(packet);
        //4.把packet进行拆包,取出数据
        int length = packet.getLength();//实际数据字节长度
        byte[] data = packet.getData();//实际接收的数据
        String s = new String(data, 0, length);
        System.out.println(s);
        //回复信息给B端
        data = "你好!发送端".getBytes();
        packet = new DatagramPacket(data, 0, data.length,
                InetAddress.getLocalHost(), 9998);
        socket.send(packet);
        //5.关闭资源
        socket.close();
    }
}

UDPSenderB

import java.io.IOException;
import java.net.*;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 发送端B
 */
public class UDPSenderB {
    public static void main(String[] args) throws IOException {
        //1.创建 DatagramSocket 对象,准备在9998发送和接收数据
        DatagramSocket socket = new DatagramSocket(9998);
        //2.将需要发送的数据,封装到 DatagramPacket 中
        byte[] data = "你好!接收端".getBytes();
        DatagramPacket datagramPacket =
                new DatagramPacket(data, 0, data.length,
                        InetAddress.getLocalHost(), 9999);
        socket.send(datagramPacket);
        //接收A消息
        socket.receive(datagramPacket);
        int length = datagramPacket.getLength();//实际数据字节长度
        data = datagramPacket.getData();//实际接收的数据
        String s = new String(data, 0, length);
        System.out.println(s);
        //关闭资源
        socket.close();
    }
}


相关文章
|
2月前
|
移动开发 网络协议 NoSQL
不为人知的网络编程(十七):冰山之下,一次网络请求背后的技术秘密
本文将抛弃千篇一律的计网知识理论,从现实的互联网技术实践角度,一步步为你分享一次网络请求背后的技术秘密。
54 0
|
13天前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
23 2
|
14天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
36 3
|
2月前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
60 10
|
2月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
56 2
|
2月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
70 1
|
2月前
|
缓存 监控 网络协议
计算机网络的常用的网络通信命令(Windows)
本文介绍了网络技术中常用的命令,如ping用于检测网络连通性,ipconfig查看TCP/IP配置,netstat监控网络状态,arp显示和修改ARP缓存,at安排任务执行,tracert追踪路由,以及nbtstat获取NetBIOS信息。
38 1
|
2月前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
20 0
|
12天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
10天前
|
存储 监控 小程序
Java中的线程池优化实践####
本文深入探讨了Java中线程池的工作原理,分析了常见的线程池类型及其适用场景,并通过实际案例展示了如何根据应用需求进行线程池的优化配置。文章首先介绍了线程池的基本概念和核心参数,随后详细阐述了几种常见的线程池实现(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特点及使用场景。接着,通过一个电商系统订单处理的实际案例,分析了线程池参数设置不当导致的性能问题,并提出了相应的优化策略。最终,总结了线程池优化的最佳实践,旨在帮助开发者更好地利用Java线程池提升应用性能和稳定性。 ####