Java Socket编程之基于UDP协议通信

1.说明

Socket(套接字)是计算机网络编程中用于实现网络通信的一种编程接口或抽象概念。
它提供了一种标准的接口,使应用程序能够通过网络与其他计算机进行通信。
Socket可以看作是应用程序与网络之间的一个通信端点,类似于电话中的插座。
通过Socket,应用程序可以创建、连接、发送和接收数据,以实现网络通信。
Socket通常使用TCP/IP协议栈作为底层网络协议,
但也可以与其他协议一起使用,
如UDP(User Datagram Protocol)和ICMP(Internet Control Message Protocol)等。

Java中基于UDP协议实现网络通信的类:

  • DatagramPacket数据包类
  • DatagramSocket端到端通信的类

服务端和客户端都使用DatagramSocket进行通信,
只是使用的细节上面有些区别。

2.服务端编程

服务端使用DatagramSocket编程步骤:

  1. 创建DatagramSocket对象,绑定监听端口
  2. 通过receive()方法监听客户端请求
  3. 通过send()方法向客户端发送响应信息
  4. 关闭相关资源
package edu.java.net.socket.udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/***UDP Socket 套接字服务端*/
public class DatagramSocketServer {public static void main(String[] args) throws Exception {// 1.创建UDP服务器端,指定监听端口DatagramSocket socket = new DatagramSocket(10085);// 2.创建数据包,用于接收客户端发送的数据byte[] reqData = new byte[1024];DatagramPacket reqPacket = new DatagramPacket(reqData, reqData.length);// 3.接受客户端发送的数据// 此方法阻塞直到接收到数据System.out.println("服务端已经启动...");socket.receive(reqPacket);// 4.读取数据String info = new String(reqPacket.getData(), 0, reqPacket.getLength());System.out.println("服务端接收到消息:" + info);// 5.向客户端响应数据// 获取客户端的地址,端口号InetAddress address = reqPacket.getAddress();int port = reqPacket.getPort();// 要返回客户端的数据byte[] rspData = "欢迎您访问服务端!".getBytes();// 创建数据报,包含响应的数据信息DatagramPacket rspPacket = new DatagramPacket(rspData, rspData.length, address, port);socket.send(rspPacket);// 6.关闭资源socket.close();}
}

3.客户端编程

客户端使用Socket编程步骤:

  1. 创建DatagramSocket对象
  2. 创建DatagramPacket对象,指定服务端IP和端口及要发送的数据
  3. 通过send()方法向服务端发送请求信息
  4. 通过receive()方法监听服务端的响应消息
  5. 关闭相关资源
package edu.java.net.socket.udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/***UDP Socket 套接字客户端*/
public class DatagramSocketClient {public static void main(String[] args) throws Exception {// 1.设置服务端的地址,端口号InetAddress address = InetAddress.getByName("localhost");int port = 10085;// 2.创建发送的数据包byte[] sendData = "我是admin用户".getBytes();DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, port);// 3.创建DatagramSocket对象,向服务器发送数据DatagramSocket socket = new DatagramSocket();socket.send(sendPacket);// 4.创建接收数据报,用于接受服务器端响应数据byte[] receiveData = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);socket.receive(receivePacket);String reply = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("客户端收到服务端消息:" + reply);// 5.关闭资源socket.close();}
}

4.服务端多线程编程

实际场景中,一个服务端往往可以支持多个客户端的连接,为多个客户端提供服务。

请参考Java UDP实现一个聊天工具的示例代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go-fastfds部署心得

我是windows系统安装 Docker Desktop部署 docker run --name go-fastdfs(任意的一个名称) --privilegedtrue -t -p 3666:8080 -v /data/fasttdfs_data:/data -e GO_FASTDFS_DIR/data sjqzhang/go-fastdfs:lastest docker run:该命令用于运…

揭秘数据库、数据仓库、数据湖和数据湖之家

您是否想知道数据仓库与数据库有何不同?什么是数据湖和数据湖屋 ?让我们用一个假设的例子来理解这些。 Bookster.biz 是全球图书销售领域的新热点。业务蓬勃发展,他们需要跟踪大量数据:数百万本书的庞大目录,全球数百…

还记得当初自己为什么选择计算机?一个程序猿的自述与分享

还记得当初自己为什么选择计算机?一个程序猿的自述与分享 大家好,我是微赚淘客系统的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在我年轻的时候,我选择了计算机专业,这条路虽然曲折艰难&…

Matlab 加权均值质心计算(WMN)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很简单,即将之前的均值中心,引入相关的权重函数(通常与距离有关),以此为每个点进行赋权,最后即可得到一个加权均值中心: 二、实现代码 %% ********<

07 手写 BA 优化

07 手写 BA 优化 原理见笔记 《后端 1》 世界坐标系 --> 相机坐标系&#xff08;外参&#xff09;–> 归一化坐标 --> 去畸变 --> 像素坐标系&#xff08;内参&#xff09; 由此得到的估计值与实际观测到的像素坐标作差&#xff0c;得到二维误差项。 7.1 误差及…

【五分钟】学会利用cv2.resize()函数实现图像缩放

引言 在numpy知识库&#xff1a;深入理解numpy.resize函数和数组的resize方法中&#xff0c;小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看&#xff0c;numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

vue.config.js文件重写打包工具配置信息

重写 Webpack 的配置信息 // cnpm install compression-webpack-plugin6.1.1 -D gzip压缩插件&#xff0c;需要引入 // cnpm i image-webpack-loader8.1.0 --save-dev 图片压缩&#xff0c;不需要引入 // npm i webpack-bundle-analyzer4.7.0 --save-dev …

深入理解pytest测试框架

在软件开发过程中&#xff0c;测试是确保软件质量的关键环节。为了提高测试效率和准确性&#xff0c;Python社区提供了许多优秀的测试框架&#xff0c;其中之一就是pytest。本文将详细介绍pytest的基本概念、特性、使用方法以及在实际项目中的应用。 一、pytest简介 pytest是…

【MATLAB源码-第95期】基于matlab的协作通信中(AF模式)中继选择算法对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 最大最小中继选择 (Max-Min Relay Selection)&#xff1a;这种算法选择能够提供最大最小信号强度的中继。它首先计算所有可用中继的信号强度&#xff0c;然后选择那些在最差信道条件下仍能保持最高信号强度的中继。其目的…

Java File类详解(上)

Java File类详解 基础知识 File类是什么&#xff1f; File对象代表路径&#xff0c;路径分为相对路径和绝对路径。 ●File对象就表示一个路径&#xff0c;可以是文件的路径、也可以是文件夹的路径。 ●这个路径可以是存在的&#xff0c;也允许是不存在的。 如路径1:"…

BACnet I/O模块在水利环境监测全自动控制系统中的应用:稳定、高效、实时

前言 “绿水青山就是金山银山”&#xff0c;水利环境一直是国际生态部门关注的重点。随着经济的发展、针对水利环境的监管也日趋严格&#xff0c;尤其是重点河、湖水系、水源地、城市内河等成为重点监管对象&#xff0c;监管力度也愈来愈严格&#xff0c;监测布点密度不断加大。…

IntelliJ IDEA 智能(AI)编码工具插件

文章目录 通义灵码-阿里CodeGeeX-清华大学智谱AIBitoAmazon CodeWhisperer-亚马逊GitHub Copilot - 买不起CodeiumAIXcoder 仅仅自动生成单元测试功能 TestMe插件&#xff08;免费&#xff09;仅仅是模板填充&#xff0c;不智能。 Squaretest插件&#xff08;收费&#xff09;…

LightDB - datediff 函数增强[mysql兼容]

LightDB在 23.4 版本对原先支持的mysql的datediff函数进行了增强&#xff0c;由原先只支持如下函数匹配&#xff1a; DATEDIFF(expr1 timestamp,expr2 timestamp) RETURN integer DATEDIFF(expr1 text,expr2 text) RETURN integer扩展到支持如下函数匹配: DATEDIFF(expr1 tim…

JeecgBoot 框架升级 Spring Boot 3.1.5

Spring Boot 从 2.7.10升级到3.1.5有以下几个点需要注意。 JDK版本支持从JDK 17-19版本javax.servlet切换到jakarta.servletspring.redis配置切换为spring.data.redisSpring Cloud 2022.0.4Spring Cloud Alibaba 2022.0.0.0 除以上三点外&#xff0c;其它都是平滑升级&#…

微信小程序之猜数字和猜拳小游戏

目录 效果图 app.json 一、首页&#xff08;index3&#xff09;的代码 wxml代码 wxss代码 二、猜数字页面&#xff08;index&#xff09;代码 wxml代码 wxss代码 js代码 三.游戏规则页面&#xff08;logs&#xff09;代码 wxml代码 wxss代码 四.猜拳页面&#xff…

ElasticSearch篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、了解ElasticSearch 深翻页的问题及解决吗?二、熟悉ElasticSearch 性能优化三、ElasticSearch 查询优化手段有哪些?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…

编程过程中出现bug如何应对?

编程过程中出现bug如何应对&#xff1f; 1.找错误原因 如果完全不知道出错的原因&#xff0c;或者说存在着很多错误的有原因&#xff0c;----》控制变量法 例如&#xff0c;昨天我在使用torchrun 多卡并行一个程序的时候&#xff0c;出现了大量的bug, 于是我将报错信息放在网…

visual Studio MFC 平台实现拉普拉斯和拉普拉斯与直方图均衡化与中值滤波相结合实现比较

拉普拉斯变换的原理与应用 本文使用visual Studio MFC 平台实现图像增强中的拉普拉斯变换&#xff0c;同时拉普拉斯一般不会单独使用&#xff0c;与其他平滑操作相结合&#xff0c;本文使用了拉普拉斯与直方图均衡化以及与中值滤波相结合&#xff0c;也对三种方式进行了对比 关…

如何提高Pycharm的使用体验?

汉化 文件---设置---插件---chinese---安装---重启ide 代码补全 tabnine 文件---设置---插件---tabnine---安装---重启ide 重启ide后生效&#xff0c;补全效果如下 自定义背景 文件---设置---外观---背景图像---选择图片---调整透明度保存即可 设置头部声明 英文版…

基于Java SSM框架实现社区疫情防控管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现社区疫情防控管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;社区疫情防控管理信息系统当然也不能排除在外。社区疫情防控管理信息系…