【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
不为人知的网络编程(十七):冰山之下,一次网络请求背后的技术秘密
本文将抛弃千篇一律的计网知识理论,从现实的互联网技术实践角度,一步步为你分享一次网络请求背后的技术秘密。
57 0
|
7天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
42 2
|
21天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
49 3
|
2月前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
65 10
|
2月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
58 2
|
2月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
72 1
|
2月前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
80 1
|
3月前
|
监控 网络协议 网络性能优化
如何办理支持UDP协议的网络
在当今网络环境中,UDP(用户数据报协议)因传输速度快、延迟低而广泛应用于在线游戏、视频流媒体、VoIP等实时服务。本文详细介绍了办理支持UDP协议网络的方法,包括了解UDP应用场景、选择合适的ISP及网络套餐、购买支持UDP的设备并进行优化设置,以及解决常见问题的策略,帮助用户确保网络稳定性和速度满足实际需求。
|
3月前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
3月前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
65 3