前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JAVA网络编程之UDP通信

JAVA网络编程之UDP通信

作者头像
用户8785253
发布于 2021-08-23 03:30:12
发布于 2021-08-23 03:30:12
1.3K00
代码可运行
举报
文章被收录于专栏:JAVA学习历程JAVA学习历程
运行总次数:0
代码可运行

文章目录


概述

UDP协议是一种对等通信的实现,发送方只需要接受方的IP(地址)和Port(端口),就可以直接向它发送数据,不需要线连接。每个程序都可以作为服务器,也可以作为客户端。UDP是一种无连接的传输协议,每个数据报的大小限定在64KB以内。数据报是一个在网络上发送的独立信息,它的到达。到达时间以及内容本身等都不能得到保证。这种传输方式是无序的,也不能确保绝对的安全可靠,但它很简单也具有较高的效率。 使用UDP协议进行数据传输是,需要将需要传输数据定义为数据报(DatagramPaket),在数据报中指明数据所要到达Socket(主机地址和端口号),然后再将数据报发送出去。实例化DatagramPacket时使用参数port和没有使用参数port的区别在与,提供port的一方可以让别人主动发送消息过来,而没有参数port的则会在发送消息时自动绑定一个本地没有使用的端口。在接收到发送的数据报(DatagramPaket)时,不仅可以获取数据,还可以获得发送方的IP和Port,这样就可以向发送方发送数据,因此,本质上二者是对等的。

一、TCP通信的实现原理

1、在接收端指定一个端口号来创建DatagramSocket,然后创建一个接收数据报(DatagramPaket),使用recevie方法等待发送方请求报文,这将阻塞服务器线程 2、在发送方创建一个DatagramSocket,使用接收方的IP和端口来创建发送数据报(DatagramPaket),使用send方法发送。现在接收方的recevie方法被唤醒,同时会将发送方的数据报内容填充到接收方的DatagramPaket中。 3、接收方从发送方的数据报中获得发送方的IP和端口,使用它们构造一个发送数据报,然后发送给发送方,这样就实现了发送方和接收方的通信 4、在通信完成后,在客服端和服务端中分别关闭Socket

二、代码

发送端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class SendMessage {

	public static void main(String[] args) throws Exception {
		// 创建发送端Socket对象
		DatagramSocket sendSocket = new DatagramSocket();
		// 准备需要发送的数据
		String message = "hello";
		// 创建一个缓冲区
		byte[] messageByte = message.getBytes();
		// 获取缓冲区中数据的真实长度
		int messageLen = message.length();
		// InetAddress实例化获取本机通信地址
		InetAddress address = InetAddress.getLocalHost();
		// 设置通信端口号
		int port = 12345;
		// 打包数据
		DatagramPacket sendPacket = new DatagramPacket(messageByte, messageLen, address, port);
		// 发送数据
		sendSocket.send(sendPacket);
		// 发送端等待接收端成功接收信息后返回的回应
		// 创建一个缓冲区,容量尽量设置大一点因为不知道发送过来的信息有多大
		byte[] recevieByte = new byte[1024*10];
		int len = recevieByte.length;
		// 接收数据报
		DatagramPacket receivePacket = new DatagramPacket(recevieByte, len);
		// 接收数据
		sendSocket.receive(receivePacket);
		// 获取接收端发送过来的真实长度以及数据
		byte[] data = receivePacket.getData();
		int length = receivePacket.getLength();
		String receiveData = new String(data,0,length);
		// 获取发送者的IP
		address = receivePacket.getAddress();
		String ip = address.getHostAddress();
		System.out.println("接收来自:"+ip+"的数据,内容是:"+receiveData);
		// 关闭资源
		sendSocket.close();	
	}
}

接收端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class RecevieMessage {

	public static void main(String[] args) throws Exception {
		// 接收消息的端口(与发送端保持一致)
		int port = 12345;
		DatagramSocket recevieSocket = new DatagramSocket(port);
		// 设置缓冲区接收发过来的信息
		byte[] receiveByte = new byte[1024*10];
		int len = receiveByte.length;
		// 接收数据报
		DatagramPacket receviePacket = new DatagramPacket(receiveByte, len);
		// 接收数据
		recevieSocket.receive(receviePacket);
		// 获取实际接收到的数据及其大小
		byte[] data = receviePacket.getData();
		int length = receviePacket.getLength();
		String receiveData = new String(data,0,length);
		// 获取发送者的IP
		InetAddress address = receviePacket.getAddress();
		String ip = address.getHostAddress();
		System.out.println("接收来自:"+ip+"的数据,内容是:"+receiveData);
		// 接收端接收到信息后发送一条确认接收的消息到发送端
		String message = "OK";
		byte[] messageByte = message.getBytes();
		int messageLength = message.length();
		// 从已收到的数据报中获取IP和port
		address = receviePacket.getAddress();
		int port1 = receviePacket.getPort();
		//构造新数据报
		DatagramPacket sendPacket = new DatagramPacket(messageByte, messageLength, address, port1);
		// 发送数据
		recevieSocket.send(sendPacket);
		// 关闭资源
		recevieSocket.close();
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java 基础篇】Java UDP通信详解
UDP(User Datagram Protocol)是一种无连接的网络传输协议,它不像TCP那样需要建立连接和维护状态,因此更加轻量级。UDP适用于那些对数据传输的实时性要求较高,可以容忍一定数据丢失的场景。本文将详细介绍Java中如何使用UDP协议进行网络通信,包括UDP套接字、数据传输、服务器和客户端的创建等。
繁依Fanyi
2023/10/12
6050
【Java 基础篇】Java UDP通信详解
DatagramPacket与DatagramSocket 详解
  a.DatagramPacket与DatagramSocket位于java.net包中
全栈程序员站长
2022/08/18
8350
【愚公系列】2022年01月 Java教学课程 66-网络编程-UDP通信
UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
愚公搬代码
2022/01/15
3220
【愚公系列】2022年01月 Java教学课程 66-网络编程-UDP通信
Java网络编程—UDP实现两个用户互相发送消息
UDP不需要实现两个用户连接就可以发送消息,所以直接开两个线程,一个发送,一个接受就可以实现。
SakuraTears
2022/01/13
8120
Java之网络编程(一)
使用循环虽然可以让服务器处理多个客户端请求。但是还是无法同时跟多个客户端进行通信。
楠羽
2022/11/18
5740
Java之网络编程(一)
【说站】java UDP通信的原理
1、UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象
很酷的站长
2022/11/23
5150
【说站】java UDP通信的原理
【Java】21 基于 UDP 的网络编程
  UDP 协议是英文 User Datagram Protocol 的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络连接。UDP 协议从问世至今已经被使用了很多年,虽然 UDP 协议目前应用不如 TCP 协议广泛,但 UDP 协议依然是一个非常实用和可行的网络传输层协议。尤其是在一些实时性很强的应用场景中,比如网络游戏、视频会议等,UDP 协议的快速更具有独特的魅力。   UDP 协议是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。至于对方是否可以接收到这些数据内容,UDP 协议无法控制,因此说 UDP 协议是一种不可靠的协议。UDP 协议适用于一次只传送少量数据、对可靠性要求不高的应用环境。与 TCP 协议一样,UDP 协议直接位于 IP 协议之上。实际上,IP 协议属于 OSI 参考模型的网络层协议,而 UDP 协议和 TCP 协议都属于传输层协议。   因为 UDP 协议是面向非连接的协议,没有建立连接的过程,因此它的通信效率很高;但也正因为如此,它的可靠性不如 TCP 协议。UDP 协议的主要作用是完成网络数据流和数据报之间的转换。在信息的发送端,UDP 协议将网络数据流封装成数据报,然后将数据报发送出去;在信息的接收端,UDP 协议将数据报转换成实际数据内容。
Demo_Null
2020/09/28
6650
【Java】21 基于 UDP 的网络编程
【Java 基础篇】Java网络编程实时数据流处理
在现代计算机应用程序中,处理实时数据流是一项关键任务。这种数据流可以是来自传感器、网络、文件或其他源头的数据,需要即时处理并做出相应的决策。Java提供了强大的网络编程工具和库,可以用于处理实时数据流。本文将详细介绍如何使用Java进行实时数据流处理。
繁依Fanyi
2023/10/12
3300
【Java 基础篇】Java网络编程实时数据流处理
【Java 网络编程】UDP 服务器 与 客户端持续交互 案例
1. UDP 单播传输流程 : A 给 B 发送数据包 , B 设备一定要处于监听 X 端口状态 , A 向 B 的 X 端口发送数据包 , B 才能收到 ; B 收到 A 的数据包后 , B 就知道了 A 的端口号 Z 的信息了 , 此时 B 可以向 A 的 Z 端口号发送数据包 ;
韩曙亮
2023/03/27
1.6K0
【Java 网络编程】UDP 服务器 与 客户端持续交互 案例
java网络编程
Java网络编程是指使用Java编程语言和相关库来实现网络通信的过程。Java提供了许多类和接口,可以方便地实现网络编程,例如Socket、ServerSocket、DatagramSocket、InetAddress等。Java的网络编程支持TCP/IP协议和UDP协议。
堕落飞鸟
2023/04/02
6940
Netty实战专栏 | Java网络编程深入解析
大家好,我是Leo哥🫣🫣🫣,本次专栏学习Java并发以及netty应用的深度学习,netty提供了异步、事件驱动、非阻塞的网络编程模型,能够轻松处理高并发、高吞吐量的网络通信场景。是一个基于Java NIO(Non-blocking I/O) 的高性能网络应用框架。但是在此之前我们需要对我们Java前置知识进行一些巩固和复习。那就是IO,Java网络编程,BIO,NIO,AIO相关知识点,前置知识是还是挺多,只有打好前面的基础我们才能更深入理解netty这个框架以及他的底层原理。对于IO相关的知识,大家可以看我之前写的这篇。本篇主要讲解和回顾Java网络编程的相关知识点。好了,话不多说让我们开始吧😎😎😎。
程序员Leo
2023/11/16
7020
Netty实战专栏 | Java网络编程深入解析
Java---网络编程(2)-UDP
☆ UDP 将数据及源和目的封装成数据包中,不需要建立连接 每个数据报的大小在限制在64k内 因无连接,是不可靠协议 不需要建立连接,速度快
谙忆
2021/01/21
3570
【java网络】编程基础
Java 网络编程 基于套接字的通信可以使程序通过指定的套接字进行通信。套接字是两个主机之间逻辑链接的端点,可以用于发送和接收数据,Java对套接字的处理非常类似于对输入输出操作的处理,因此,程序从socket中读写就像从文件中读写一样容易 Java支持流套接字和数据报套接字:流套接字使用传输控制协议TCP进行数据传输,而数据报套接字使用的是用户数据报协议UDP进行数据传输 1、客户/服务器计算模式 网络程序设计通常涉及一个服务器和一个或多个客户,客户向服务器发送请求,服务器响应请求。服务器创建一个服务器套
程序员互动联盟
2018/03/16
1.1K0
Java-网络编程
哈喽!大家好,我是小简。今天开始学习《Java-网络编程》,此系列是我做的一个 “Java 从 0 到 1 ” 实验,给自己一年左右时间,按照我自己总结的 Java-学习路线,从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!
小简
2023/01/04
4730
Java-网络编程
深入探秘 Java 网络编程:从基础到多线程服务器的全方位指南
Java 作为一门功能强大的编程语言,不仅在桌面应用、移动开发、后端开发等领域表现出色,还在网络编程中拥有广泛的应用。网络编程涉及在两个或多个设备之间通过网络进行通信,这对于构建分布式系统、客户端-服务器应用程序、以及互联网服务至关重要。在这篇博客中,我们将详细探讨 Java 网络编程的基础知识,并通过代码示例展示如何在 Java 中实现网络通信。
2的n次方
2024/10/15
1790
深入探秘 Java 网络编程:从基础到多线程服务器的全方位指南
JavaSe-网络编程
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
框架师
2021/04/28
3370
JavaSe-网络编程
Java网络编程
ip:全称为:互联网协议地址,也称IP地址,是分配给上网设备的数字标签,常见的IP分类为:ipv4和ipv6
乐心湖
2020/07/31
8640
Java网络编程
Java成神路 —— 网络编程
1.网络编程入门 1.1 网络编程概述 1. 计算机网络 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 2. 网络编程 在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换 1.2 网络编程三要素 1. IP地址 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是
繁依Fanyi
2023/05/07
3370
JAVA网络编程TCP通信
Socket称为“套接字”,描述IP地址和端口。在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端口上,不同的端口对应于不同的服务。Socket和ServerSocket类位于java.net包中。ServerSocket用于服务端,Socket是建立网络连接时使用的。连接成功时,应用程序两端都会产生一个Socket实例,通过操作这个实例完成所需会话。
HUC思梦
2020/09/03
8910
JAVA网络编程TCP通信
java网络编程从0到1快速上手
java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。
一个风轻云淡
2023/10/15
2740
java网络编程从0到1快速上手
相关推荐
【Java 基础篇】Java UDP通信详解
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文