Java笔记:UDP基础使用与广播

2023-10-26

目的

UDP是比较基础常用的网络通讯方式,这篇文章将介绍Java中UDP基础使用的一些内容。

本文中使用 Packet Sender 工具进行测试,其官网地址如下:
https://packetsender.com/

作为客户端使用

作为客户端使用主要就是向某个服务器发送消息了,主要就是使用 send 方法了。 send 发送一个 DatagramPacket 类型的数据包,数据包中主要包含要发送的数据以及目标地址和端口号。下面是个简单的演示:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

class UdpTest {
    public static void main(String[] args) throws IOException {
            DatagramSocket udp = new DatagramSocket(); // 创建udp socket对象
            byte[] msg = {0, 1, 2, 3, 4, 5, 6, 7};
            // 发送消息,127.0.0.1是内部回环地址(表示这是发给本机自己的),对方端口号是57500
            DatagramPacket packet = new DatagramPacket(msg, 8, InetAddress.getByName("127.0.0.1"), 57500);
            udp.send(packet); // 发送数据包
            udp.close();
    }
}

在这里插入图片描述

另外 DatagramSocket 对象有 connect 方法,可以先记录目标地址和端口号,这样数据包构建的时候就不需要再填写这个信息了。

作为服务器使用

作为服务器使用主要就是监听某个端口号,然后等着接收消息就行。下面是个简单的演示:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

class UdpTest {
    public static void main(String[] args) throws IOException {
            DatagramSocket udp = new DatagramSocket(22333); // 创建udp socket对象,自身端口号设置为22333(启动监听)
            while (true) {
                byte[] msg = new byte[1024];
                DatagramPacket packet = new DatagramPacket(msg, 1024);
                udp.receive(packet); // 接收数据包,该方法会阻塞在这里直到接收到数据包
                                     // 所以更多时候会用多线程来操作
                System.out.println("From IP:" + packet.getAddress() + " Port:" + packet.getPort() + " Msg:" + (new String(msg)));
            }
    }
}

在这里插入图片描述

虽然这里是做为服务器使用的,但是 DatagramSocket 对象其实也没那么明确的区分的,想发数据和前面那样发送就行。

广播

广播主要就是指发送时向内网中所有设备发送消息了,操作上最主要就是发送消息时地址使用 广播地址

广播地址获取

下面代码可以获取设备中所有广播地址:

// import java.net.Inet4Address;
// import java.net.InetAddress;
// import java.net.InterfaceAddress;
// import java.net.NetworkInterface;
// import java.net.SocketException;
// import java.util.ArrayList;
// import java.util.Enumeration;
// import java.util.List;

public static List<InetAddress> getBroadcastAddresses() throws SocketException {
    List<InetAddress> list = new ArrayList<>();
    Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();

    while (enumeration.hasMoreElements()) {
        NetworkInterface networkInterface = enumeration.nextElement(); // 获取单个网络接口(或者说网卡)
        if (!networkInterface.isUp() || networkInterface.isLoopback() || networkInterface.isVirtual()) {
            // 过滤掉未启用接口、回环接口、虚拟接口 (这些依据自己情况调整)
            continue;
        }

        List<InterfaceAddress> interfaceAddresses = networkInterface.getInterfaceAddresses(); // 接口下地址列表
        for (InterfaceAddress interfaceAddress : interfaceAddresses) {
            InetAddress inetAddress = interfaceAddress.getAddress(); // 获取IP地址
            if ((inetAddress == null) || !(inetAddress instanceof Inet4Address)) {
                // 如果地址为空或者非IPv4地址则跳过
                continue;
            }
            list.add(interfaceAddress.getBroadcast()); // 将广播地址添加到列表中
        }
    }
    return list;
}

广播功能演示

在这里插入图片描述
我电脑上有三个符合条件的网络,所以向三个网络中分别发送了消息。

总结

UDP的使用比较简单,这里没有提及的是组播和任意播功能,因为我不太用这两种所以这里也就不介绍了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java笔记:UDP基础使用与广播 的相关文章

  • 使用java进行JSON模式验证[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在为返回 JSON 对象的 java webapp 编写一些验收测试 我想验证返回的 JSON 是否针对架构进行验证 任何人都可以建议
  • 谁能解释一下POJO或POCO的含义和用法[重复]

    这个问题在这里已经有答案了 可能的重复 纯旧 Java 对象 POJO 一词的确切含义是什么 https stackoverflow com questions 3326319 what does the term plain old ja
  • 尝试将 XLSX 数据导入 R 时出现 IllegalArgumentException

    在将 xlsx 文件导入 R 时 我遇到了以下错误 mydata lt read xlsx C Users aniruddha Downloads failingExample xlsx 1 Error in jcall row ir Lo
  • 按钮和窗口之间的空间

    我这里有这段代码 其想法是在主窗口中在文本区域旁边有两个按钮 但我尚未添加 在尝试使用 GridBagLayout 并在此过程中扯掉我的头发后 我决定不使用布局并在不可调整大小的窗口内手动放置按钮 import java awt impor
  • 良好的客户端套接字池

    我需要管理从我的 Java 应用程序到外部服务器的长时间运行的 TCP 套接字连接 我正在寻找一个好的套接字池 这样我就可以重复使用套接字 有什么建议吗 你可以看看在上面建立一个套接字池公共池 http commons apache org
  • Java:无法从未命名的模块读取包?

    在将项目转移到 Gradle 时 我停止使用 org json 的自定义构建 该构建安装了 module info java 以符合模块系统 现在 我通常通过 Maven 使用它 并且由于 org json 默认情况下不是一个模块 因此它被
  • 启动jetty服务器时出现NoClassDefFoundError

    我正在尝试在码头服务器中托管我的网络应用程序 spring 我将 war 文件复制到 jetty 服务器中的 webapp 文件夹中 我并不是想嵌入jetty服务器 而是试图在jetty内托管应用程序 如tomcat 我没有安装jetty
  • 如何在 Intellij IDEA 中为 Apache Tomcat 指定自定义 JRE 路径?

    问题是如何指定自定义JRE路径为Apache tomcat in Intellij IDEA 当从以下位置启动应用程序时IDEA 看来 只需配置它的路径 路径jvm dll in Apache Tomcat监视器没有帮助 还有其他想法或方法
  • 在 Maven 中解决或编译循环依赖关系 [重复]

    这个问题在这里已经有答案了 我有一个有趣的问题 而不是寻找a解决方案 我正在寻找解决方案s Alice 项目有一个 pom xml 在其中 pom 说她被包装成一个罐子 虽然她是一个坚强的女人 但她依赖鲍勃 鲍勃项目是一个互补主义者 他说他
  • 如何更改鼠标进入/鼠标退出时按钮的图标图像?

    我想更改鼠标输入和鼠标退出时按钮的图标图像 private void jButton1MouseEntered java awt event MouseEvent evt this jButton1 setBackground Color
  • 从列表中删除对象的最佳方法是什么

    我有以下逻辑来删除系统中的非活动用户 因为我们在迭代列表时无法删除行 有更好的方法来处理这个问题吗 List
  • 将 uiautomator 测试用例与 Android 中的应用程序代码集成

    我正在使用 Eclipse IDE 这是我的 uiautomator 测试用例代码 public class caltest extends UiAutomatorTestCase public void testDemo throws U
  • 根据条件更改 JSlider 的最小值和最大值

    我正在 Netbeans 中创建 Swing GUI 此 GUI 的目的是打开一个 缓冲 图像 在 JLabel 中作为图标 并对其应用仿射变换 现在我正在做 4 个转换 如下所示 现在 每个变换都需要两个滑块来更改 X 和 Y 值 但旋转
  • Spring方法获取给定类型的所有bean

    我试图从一个相同类型的豆子中获取所有豆子FileSystemXmlApplicationContext 我正在使用factory getBeansOfType SomeType class 但我注意到它只返回顶级 bean 是否有任何其他方
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • JPA 的 commit() 方法是否使实体分离?

    我现在一直在搜索JPA实体生命周期 但现在 关于实体生命周期存在一些缺失的点 我在 stackoverflow 的一篇帖子中找到了下图 请记住该图已被投票 根据此图 当我们持久化实体时 它就变成了托管实体 好的 没问题 当我们提交时 数据会
  • Big O 用于有限、固定大小的可能值集

    这个问题 https stackoverflow com questions 12305028 java what is the best way to find first duplicate character in a string引
  • java:如何仅选择jtable中的一个单元格而不是整行

    在 jTable 中 我希望当用户单击单元格时 这句话会打印在屏幕上 I am cell in row X and column Y 其中 x 和 Y 是单击单元格的行和列 但我得到的是 例如 当我单击第 1 行和第 4 列中的单元格时 我
  • 从自定义类导入时,XMLBeans jar 无法签名

    在 NetBeans 中 我创建了一个 Exporter 类 该类使用 APACHE POI 将一些数据导出到 EXCEL 文件 而 APACHE POI 使用 XMLBeans 我通过下载 zip 二进制文件并手动添加 jar 来添加 A
  • 使用 HttpClient 在 java 中进行连接池 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 HttpClient 创建连接池 我必须频繁连接到同一台服务器 值得创建这样一个池吗 是否可以保持 HTTP 连接处于活动状

随机推荐

  • JS背景网页樱花特效

    js绘制网页樱花飘落背景 放入底部可用 在网上也有很多这样案例 js 放于底部 推荐下面这种写法 当然还有一种 小唯美 1
  • Android的服务Service

    Android学了太久了 都忘了 复习下四大组件之一的Service 介绍 Android的Service是一种在后台执行长时间运行操作的组件 它可以在没有用户界面的情况下执行任务 并且可以与应用程序的其他组件进行通信 Service通常用
  • openwrt python_Openwrt python,openwrt上使用Python

    需要安装libffi python mini python libffi以及python mini需要安装在python之前 wget c http downloads openwrt org cn backfire 10 03 1 brc
  • fedora上编译运行C文件

    include
  • 达梦管理工具连接远程达梦数据库报6001错误,但是disql可以连接

    问题 使用达梦客户端工具访问服务连接 总是报6001错误 已排除如下问题 1 服务器防火墙限制 2 达梦数据库服务没启动 可以使用 disql testuser 123456 192 168 1 22 5236命令连接 3 最大会话限制 数
  • MyBatis 中的插件如何实现

    MyBatis 是一款优秀的 Java 持久层框架 它提供了许多方便开发的功能 其中包括插件 插件可以用于修改 MyBatis 的默认行为 增强其功能 在 MyBatis 中 我们可以使用 Interceptor 接口和 Intercept
  • 海森矩阵(Hessian matrix)

    转自 http hi baidu com imheaventian item c8591b19907bd816e2f98612 在数学中 海森矩阵 Hessian matrix 或 Hessian 是一个自变量为向量的实值函数的二阶偏导数组
  • python3 pygame_利用python3 的pygame模块实现塔防游戏

    利用python3的pygame模块基本实现塔防游戏的基本功能 包括血量和分数显示 bgm 防御塔建造 防御塔攻击范围内的敌军 暂停和加速功能 由于实在没有素材 用的都是自己截图P的 所以美化不好 但基本保证功能 其中有一个BUG 但不影响
  • linux基础命令操作

    1 将 etc下面所有的文件 文件名是a m开头的 并且是以 conf结尾的文件复制到 data目录下 2 定义一个别名copy 要求当所有用户执行copy时 执行的是以下操作cp r etc root etc 年月日 要求永久生效 年月日
  • 备忘录之在jsp页面中获取链接,url,传递的参数

    如 url szy wsm jsp doJump2 jsp id 666 可以通过jsp页面在head标签之上写入如下代码 在方法中使用 function page mouseenter function var id
  • Unity3D——在Unity3D中使用关键帧动画的注意事项

    1 记录Animation动画复位的一个注意事项 最近想做一个动画的分步播放 但是在实现动画复位时发现以前用的动画复位的代码不起作用了 Animation AnimationObj GetComponent
  • DLLNotFoundException:xxx tolua... 错误打印

    一 DLLNotFoundException介绍 首先区分一个问题只要是与DLLNotFoundException相关的必然是丢失了DLL文件 不管是安卓还是Window还是Mac原理都是一样的 二 Plugins文件夹 既然是跟DLLNo
  • docker 安装 nginx-proxy-manager

    一 拉取镜像 docker pull jc21 nginx proxy manager 二 部署运行 docker run restart always name nginxmanager d p 80 80 p 81 81 p 443 4
  • Ubuntu14.04 安装Android studio

    Ubuntu14 04 安装Android studio Android Studio 官方 Android IDE Android Studio 提供用于为各类 Android 设备开发应用的最快速的工具 利用世界一流的代码编辑 调试 性
  • Linux字符设备驱动file_operations详解

    struct file operations struct file operations在Fs h这个文件里面被定义的 如下所示 struct file operations struct module owner 拥有该结构的模块的指针
  • Js中的枚举

    原文见 Js中的枚举 在JavaScript目前的版本中 没有枚举这个概念 当然 ECMA 262第三版中已经将enum作为关键字保留 然而 如同JavaScript中没有class一样 但我们仍然可以通过间接的方式 JSON来实现它 如下
  • 合并Dwg文件

    尝试用 NET平台C 写个打开其他DWG文件并读取所有内容 打包成块后再插入当前文档的程序 1 打开其他指定文件没问题 2 打包成块程序这里出了问题3 但若是直接在当前文档创建直线 再运行打包成块程序就没问题 不知道是何原因 可有大神出来指
  • 快手磁力金牛和小店通的区别

    手磁力金牛平台是全新电商营销平台磁力金牛 磁力金牛平台将集合快手粉条 小店通 真正打通公域私域流量 实现全站数字化营销 核心提示 磁力金牛平台整合了小店通 粉条的投放链路 公域私域流量融合 磁力金牛平台整合了小店通 粉条的投放链路 公域私域
  • win7 svn服务器搭建过程

    svn简介 https baike baidu com item subversion 7818587 fr aladdin SVN服务端分为 Subversion和VisualSVN Server 这里 我选择了VisualSVN Ser
  • Java笔记:UDP基础使用与广播

    文章目录 目的 作为客户端使用 作为服务器使用 广播 广播地址获取 广播功能演示 总结 目的 UDP是比较基础常用的网络通讯方式 这篇文章将介绍Java中UDP基础使用的一些内容 本文中使用 Packet Sender 工具进行测试 其官网