当前位置: 首页 > news >正文

java NIO实现UDP通讯

NIO Udp通讯工具类

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.util.Iterator;import lombok.extern.slf4j.Slf4j;/*** NIO Udp工具类*/
@Slf4j
public class MyUdpSocket {//获取报文的通道private DatagramChannel channel;//多路复用选择器private Selector selector;private final int MAX_SIZE = 1280;//当前获取到版本的端口private int client_port;//记录当前获取到报文的ipprivate String client_ip;ByteBuffer receive_buffer = ByteBuffer.allocate(MAX_SIZE);public MyUdpSocket(String ip, int port) throws IOException {channel=DatagramChannel.open();selector=Selector.open();try{//调整此通道为非阻塞模式  channel.configureBlocking(false);  //获取与套接字通道关联的套接字,并将该套接字绑定到本机指定端口  channel.socket().bind(new InetSocketAddress(port));//为通道选择器注册通道,并指定操作的选择键集  channel.register(selector, SelectionKey.OP_READ);  }catch (IOException e) {log.error("MyUdpSocket init error", e);}}/*** 接收数据* @return*/public final int receive() {try{receive_buffer.clear();if(selector.select(1000)!=0) {Iterator<SelectionKey> itr = selector.selectedKeys().iterator();while(itr.hasNext()){  SelectionKey key = itr.next( );itr.remove(); if(key.isReadable()){DatagramChannel dc = (DatagramChannel)key.channel();  InetSocketAddress client = (InetSocketAddress)dc.receive(receive_buffer); //接收来自任意一个Client的数据报if (client!=null) {client_ip=client.getAddress().getHostAddress();client_port=client.getPort();//System.out.println(client_ip+":"+client_port+" size="+receive_buffer.position());key.interestOps(SelectionKey.OP_READ);return receive_buffer.position();} else {return 0;}} else {return 0;}}}}catch (IOException e) {log.error(String.format("udp_receive出错:%s", e.getMessage()), e);}return 0;}public final void close() throws IOException {selector.close();channel.close();}public final int get_client_port(){return client_port;}public final String get_client_ip(){return client_ip;}public final byte[] get_receive_packet(int size){byte[] packet = new byte[size];for (int i=0; i<size; i++){packet[i]=receive_buffer.array()[i];}return packet;}public final void get_receive_buffer(byte[] buffer){receive_buffer.get(buffer);}
}

用法:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;public class UdpSocketTest {public static void main(String[] args) throws IOException {MyUdpSocket socket = new MyUdpSocket("127.0.0.1", 1234);while(true) {int size = socket.receive();if (size>0) {byte[] data = socket.get_receive_packet(size);System.out.println("ip:" + socket.get_client_ip());DatagramPacket packet = new DatagramPacket(data, 0, data.length);packet.setSocketAddress(new InetSocketAddress(socket.get_client_ip(), socket.get_client_port()));DatagramSocket datagramSocket = new DatagramSocket(null);datagramSocket.setReuseAddress(true);datagramSocket.send(packet);datagramSocket.close();}}}
}

相关文章:

java NIO实现UDP通讯

NIO Udp通讯工具类 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.DatagramChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.util.Iterator;impo…...

ffmpeg如何实现视频推流?

FFmpeg是一个强大的多媒体框架&#xff0c;用于处理视频和音频数据。它包括了libavcodec(用于解码和编码)、libavformat(用于格式转换)、libavutil(提供一些辅助工具和函数)、libavfilter(用于音视频过滤)等多个库。 以下这些都是FFmpeg的特性 FFmpeg支持大量的音视频编解码器&…...

【HTML5】html5开篇基础(3)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…...

echarts实现3D柱状图(视觉层面)根据博主改编

https://blog.csdn.net/weixin_57798646/article/details/131067725 这是原贴 在这个基础上我需要实现 一根柱子 代码如下 <!DOCTYPE html> <html lang"en" style"height: 100%"><head><meta charset"utf8"> </hea…...

【一篇文章理解Java中多级缓存的设计与实现】

文章目录 一.什么是多级缓存&#xff1f;1.本地缓存2.远程缓存3.缓存层级4.加载策略 二.适合/不适合的业务场景1.适合的业务场景2.不适合的业务场景 三.Redis与Caffine的对比1. 序列化2. 进程关系 四.各本地缓存性能测试对比报告(官方)五.本地缓存Caffine如何使用1. 引入maven依…...

OpenSource - 开源WAF_SamWaf

文章目录 PreSafeLine VS SamWaf开发初衷软件介绍架构界面主要功能 使用说明下载最新版本快速启动WindowsLinuxDocker 启动访问升级指南自动升级手动升级 在线文档 代码相关代码托管介绍和编译已测试支持的平台测试效果 安全策略问题反馈许可证书贡献代码 Pre Nginx - 集成Mod…...

旅游避坑指南

1.火车站旁白的小摊贩&#xff0c;还有周边的小饭店百分之百是黑店&#xff0c;不仅难吃要死而且巨黑&#xff01;&#xff01;&#xff01; 可以地图上搜索附近的大型商超&#xff0c;例如泰安市的银座商超&#xff0c;里面的东西不仅好吃而且价格透明&#xff0c;还有很多当…...

矩阵系统源码搭建的具体步骤,支持oem,源码搭建

一、前期准备 明确需求 确定矩阵系统的具体用途&#xff0c;例如是用于社交媒体管理、电商营销还是其他领域。梳理所需的功能模块&#xff0c;如多账号管理、内容发布、数据分析等。 技术选型 选择适合的编程语言&#xff0c;如 Python、Java、Node.js 等。确定数据库类型&…...

正则表达式调试工具实战

正则表达式调试工具实战 1、新建工程QWidget工程工程名RegexTool 如果QT不会配置,请参考我的博客,QT配置 Widget.cpp 默认内容如下 2、主界面设计 三行两列,每行采用HBoxLayout作为行布局控件,内部一个Lable控件和一个TextEdit控件,采用VBoxLayout 控件包裹三个HBoxLa…...

SQL:函数以及约束

目录 介绍 函数 字符串函数 数值函数 日期函数 流程函数 约束 总结 介绍 说到函数我们都不陌生,在C,C,java等语言中都有库函数,我们在平时也是经常使用,函数就是一段代码,我们既可以自定义实现,又可以使用库里内置的函数;从来更加简洁方便的完成业务;同样的在SQL中也有…...

在Linux中将设备驱动的地址映射到用户空间

本期主题&#xff1a; MMU的简单介绍&#xff0c;以及如何实现设备地址映射到用户空间 往期链接&#xff1a; Linux内核链表零长度数组的使用inline的作用嵌入式C基础——ARRAY_SIZE使用以及踩坑分析Linux下如何操作寄存器&#xff08;用户空间、内核空间方法讲解&#xff09;…...

电脑自带dll修复在哪里,dll丢失的6种解决方法总结

在现代科技日新月异的时代&#xff0c;电脑已经成为我们生活中不可或缺的一部分。然而&#xff0c;在使用电脑的过程中&#xff0c;我们常常会遇到一些常见的问题&#xff0c;其中之一就是dll文件丢失或损坏。当这些dll文件丢失或损坏时&#xff0c;可能会导致某些应用程序无法…...

k8s基于nfs创建storageClass

首先安装nfs #服务端安装 yum install -y nfs-utils rpcbind #客户端安装 yum install -y nfs-utils #启动服务 并设置开启启动 systemctl start rpcbind && systemctl enable rpcbind systemctl start nfs && systemctl enable nfs #创建共享目录 mkdir -p /…...

Chrome无法拖入加载.crx扩展文件(以IDM为例)

问题原因&#xff1a;新版本的Chrome浏览器已不支持加载.crx文件 解决办法&#xff1a;将.crx文件压缩为.zip文件&#xff0c;解压缩后再加载到Chrome中 以IDM的.crx文件作为示例&#xff1b; IDM的.crx文件位于C:\Program Files (x86)\Internet Download Manager; 将IDMGCE…...

数字教学时代:构建高效在线帮助中心的重要性

在数字化教学日益普及的今天&#xff0c;教育领域正经历着前所未有的变革。随着在线课程、虚拟教室、智能学习平台等数字化工具的广泛应用&#xff0c;教育资源的获取方式和学习模式发生了深刻变化。然而&#xff0c;这种变革也带来了新的挑战&#xff0c;其中之一便是如何确保…...

828华为云征文|华为云弹性云服务器FlexusX实例下的Nginx性能测试

本文写的是华为云弹性云服务器FlexusX实例下的Nginx性能测试 目录 一、华为云弹性云服务器FlexusX实例简介二、测试环境三、测试工具四、测试方法五、测试结果 下面是华为云弹性云服务器FlexusX实例下的Nginx性能测试。 一、华为云弹性云服务器FlexusX实例简介 华为云弹性云服…...

知识图谱入门——2:技术体系基本概念:知识表示与建模、知识抽取与挖掘、知识存储与融合、知识推理与检索

知识图谱是通过构建“实体”和“关系”来描述世界的信息网络&#xff0c;它不仅是数据的存储方式&#xff0c;还可以支持推理与查询&#xff0c;帮助系统更好地理解、整合和利用数据。 文章目录 1. 知识表示与建模2. 知识抽取与挖掘3. 知识存储与融合4. 知识推理与检索总结 1.…...

【不看会后悔系列】排序之——文件归并【史上最全详解】~

文章目录 前言一、何为文件归并&#xff1f;二、文件归并思路分析三、创造多数据文件四、前置准备——堆排序五、两个文件写入到第三个文件六、读 N 个数据返回给文件,并返回读到数据的个数七、文件归并八、文件归并完整代码总结1. 运行代码2. 运行截图 总结 前言 学习了归并排…...

安全点的应用场景及其原理详解

引言 在Java虚拟机&#xff08;JVM&#xff09;运行的过程中&#xff0c;有些时刻&#xff0c;系统需要暂停所有正在运行的线程&#xff0c;以执行某些全局操作或确保数据的一致性。这些暂停线程的时刻被称为**“安全点”**&#xff08;Safepoint&#xff09;。尽管安全点最广…...

计算机各专业2025毕业设计选题推荐【各专业 | 最新】

计算机各专业2025毕业设计选题推荐 Java、Python、Vue、PHP、小程序、安卓、大数据、爬虫、可视化、机器学习、深度学习 文末有联系方式~~~ 1.Java 基于Java的在线购物系统设计与实现Java开发的图书管理系统基于Spring Boot的社交媒体平台Java实现的移动健康应用在线学习平…...

【Python报错已解决】IndexError: index 0 is out of bounds for axis 1 with size 0

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

SpringGateway(网关)微服务

一.启动nacos 1.查看linux的nacos是否启动 docker ps2.查看是否安装了nacos 前面是你的版本&#xff0c;后面的names是你自己的&#xff0c;我们下面要启动的就是这里的名字。 docker ps -a3.启动nacos并查看是否启动成功 二.创建网关项目 1.创建idea的maven项目 2.向pom.x…...

jQuery面试题:(第三天)

8.你在jQuery中使用过哪些插入节点的方法&#xff0c;它们的区别是什么&#xff1f; 答:append(),appendTo(),prepend(),prependTo(),after(),insertAfter() before(),insertBefore() 内添加 1.append()在文档内添加元素 2.appendTo()把匹配的元素添加到对象里 3.prepend()…...

聊聊国内首台重大技术装备(2)

上次&#xff0c;介绍了《首台&#xff08;套&#xff09;重大技术装备推广应用指导目录&#xff08;2024年版&#xff09;》中介绍的硅外延炉&#xff0c;湿法清洗机&#xff0c;氧化炉&#xff0c;见文章&#xff1a; 《聊聊国内首台重大技术装备&#xff08;1&#xff09;》…...

python 实现rayleigh quotient瑞利商算法

rayleigh quotient瑞利商算法介绍 瑞利商&#xff08;Rayleigh Quotient&#xff09;算法在多个领域&#xff0c;如线性代数、计算机视觉和机器学习等&#xff0c;都有重要的应用。瑞利商定义为函数 R ( A , x ) ( x H A x ) / ( x H x ) R(A, x) (x^H Ax) / (x^H x) R(A,x)…...

Java Web应用升级故障案例解析

在一次Java Web应用程序的优化升级过程中&#xff0c;从Tomcat 7.0.109版本升级至8.5.93版本后&#xff0c;尽管在预发布环境中验证无误&#xff0c;但在灰度环境中却发现了一个令人困惑的问题&#xff1a;新日志记录神秘“失踪”。本文深入探讨了这一问题的排查与解决过程&…...

Java类和对象、自定义包、static、代码块、方法重写

目录 1.类和对象 2.this指针 3.对象的构造和初始化 3.1默认初始化 3.2就地初始化 3.3构造初始化 3.4IDEA快速填充 3.5使用this简化 3.6初始化的总结 4.包的引入 4.1包的概念 4.2导入包中的类 4.3自定义包 5.static修饰 6.代码块的划分 7.方法重写 1.类和对象 使…...

【系统代码】招投标采购一体化管理系统,JAVA+vue

前言&#xff1a; 随着互联网和数字技术的不断发展&#xff0c;企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式&#xff0c;能够提高采购效率、降低采购成本、优化供应商合作效率&#xff0c;已成为企业实现效益提升的关键手段。系统获取在文末…...

基于yolov8深度学习的120种犬类检测与识别系统python源码+onnx模型+评估指标曲线+精美GUI界面目标检测狗类检测犬类识别系统

【算法介绍】 基于YOLOv8深度学习的120种犬类检测与识别系统是一款功能强大的工具&#xff0c;该系统利用YOLOv8深度学习框架&#xff0c;通过21583张图片的训练&#xff0c;实现了对120种犬类的精准检测与识别。 该系统基于Python与PyQt5开发&#xff0c;具有简洁的UI界面&a…...

UNI-APP_iOS开发技巧之:跳转到TestFlight或者App Store

有的时候我们的应用可能需要上TestFlight或者App Store&#xff0c;更新升级就需要跳到TestFlight里面。方法如下&#xff1a; 跳转到TestFlight: itms-beta://itunes.apple.com/app/你的AppID 跳转到AppStore: itms-apps://itunes.apple.com/app/你的AppIDhttps://airp…...

市场调查与预测网站建设/微信crm管理系统

import sysdef check_ip(num):"""检查IP"""num = int(num)if 0 <= num <= 255:passelse:raise Except...

企业级java电商网站开发/淘宝关键词排名查询工具免费

习题4-6 水仙花数 (20 分) 水仙花数是指一个N位正整数&#xff08;N≥3&#xff09;&#xff0c;它的每个位上的数字的N次幂之和等于它本身。例如&#xff1a;153135333。 本题要求编写程序,计算所有N位水仙花数。 输入格式: 输入在一行中给出一个正整数N&#xff08;3≤N≤…...

个人装修队/武汉排名seo公司

这是一道区间贪心的题目&#xff0c;对于这道题&#xff0c;由于岛屿的位置在坐标轴上是确定的&#xff0c;而雷达的位置及数量则无法确定&#xff0c;因此我们可以根据岛屿来确定雷达的位置及数量。首先&#xff0c;我们可以根据岛屿的位置以及雷达的半径来确定覆盖该岛屿的雷…...

qq空间怎么做网站/网站建设公司seo关键词

1.定时器 2.websocket,可以被动的接受后台数据&#xff0c;用回调函数响应&#xff08;http://www.runoob.com/html/html5-websocket.html&#xff09;...

网站建设的误区/零基础能做网络推广吗

为什么80%的码农都做不了架构师&#xff1f;>>> 进入IT行业快有半辈子了,今天在家看书无聊,写一遍文章跟大家一起探讨一下只学了一门C#后的优点缺点.希望大家一起补充. 所谓的只学了C#也是有些相对的, 以前学过FoxBase, C, pascal, delphi, VFP, PB, c, javascript…...

点击图片预览 wordpress/郑州seo网站排名

目前智能顾问已掌握大量资产&#xff0c;第一个以人工智能驱动的基金Rebellion曾成功预测了2008年股市崩盘&#xff0c;并在2009年给希腊债券F评级&#xff0c;而当时惠誉的评级仍然为A&#xff0c;通过人工智能&#xff0c;Rebellion比官方降级提前一个月&#xff1b;掌管900亿…...