java UDP通信程序DatagramSocket数据接收

news2024/11/23 15:45:28

在查看本文前 您可以先看看我的文章
java UDP通信程序DatagramSocket数据发送
对UDP有一个基本的了解

然后这里我们就直接看代码了

我们先创建一个包 包下创建两个类 分别是
sendOut 发送类
参考代码如下

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

public class sendOut {
    public static void main(String args[]) throws IOException {
        //通过 DatagramSocket 类创建一个发送端的对象
        DatagramSocket ds = new DatagramSocket();
        byte[] data = "Hello World".getBytes();
        InetAddress addIp = InetAddress.getByName("ip地址");
        DatagramPacket dp = new DatagramPacket(data,data.length,addIp,6800);
        ds.send(dp);
        ds.close();
    }
}

sendOut 作为发送数据的端 会将数据发给接收端

注意 如果你是在和自己对接 这里的ip必须是你自己的 如果你是在和别人一起做 就可以写别人的电脑ip

然后 receive 数据接收类
参考代码如下

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

public class receive {
    public static void main(String args[]) throws IOException {
        //通过DatagramSocket类创建接收数据对象  指定了端口
        DatagramSocket ds = new DatagramSocket(6800);
        //定义一个字节数组 用于定义数据容量
        byte[] bys = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bys,bys.length);
        //通过DatagramSocket创建的接收数据对象  接收数据
        ds.receive(dp);
        //利用字节数据接收数据
        byte[] data = dp.getData();
        //将字节数据转为字符串
        String datacon = new String(data);
        //输出接收到的数据
        System.out.println(datacon);
        //关闭接收端
        ds.close();
    }
}

注意这里的端口 必须和你发送端写的是一样的 因为如果你端口写的不一样 他也会找不到的

然后我们先运行 receive 接收端
在这里插入图片描述
没有任何反应 但跑起来了

然后我们运行sendOut发送端
在这里插入图片描述
也没有任何反应 但这是我们再去看接收端
在这里插入图片描述
很显然 数据是拿到了 但后面多出来很多奇奇怪怪的东西

这就涉及到 我们设置的容量 我们给的 1024 但确实我们压根不用那么多 我们就几个字 所以 这里我们要处理一下

我们将 receive类的 main方法修改成如下内容

public static void main(String args[]) throws IOException {
  //通过DatagramSocket类创建接收数据对象  指定了端口
    DatagramSocket ds = new DatagramSocket(6800);
    //定义一个字节数组 用于定义数据容量
    byte[] bys = new byte[1024];
    DatagramPacket dp = new DatagramPacket(bys,bys.length);
    //通过DatagramSocket创建的接收数据对象  接收数据
    ds.receive(dp);
    //利用字节数据接收数据
    byte[] data = dp.getData();
    //获取传来的数据数据长度
    int len = dp.getLength();
    //将字节数据转为字符串
    String datacon = new String(data,0,len);
    //输出接收到的数据
    System.out.println(datacon);
    //关闭接收端
    ds.close();
}

这里 我们通过 getLength 拿了一下 发送端发送的数据的实际长度
然后通过 String构造方法 去拿到所有有内容的部分 那么 我们按刚才的逻辑 再来一次

在这里插入图片描述
就没有任何问题了

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

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

相关文章

【Flutter 笔记系列 第 3 篇】如何正确对待Name source files using `lowercase with underscores`

相信很多安装了一些提示插件的小伙伴都遇见过 Name source files using lowercase with underscores flutter 提示 如下图 此时会有两种选择 1.能跑就行,无视它 2.好烦,我也没干什么怎么就提示不规范了。 3.一定是哪里出了问题,我要找到…

高通Ride软件开发包使用指南(8)

高通Ride软件开发包使用指南(8)6.9跟踪6.10 基础感知延迟分析6.10.1生成CSV6.9跟踪 用户可以使用Google Chrome中的跟踪功能分析代码的执行浏览器以下步骤中的示例显示如何分析Foundation SDK相机知觉 必须启用相关日志条目,因为跟踪使用SD…

说说Spring事件发布机制

文章目录前言一、 使用到事件发布机制的源码二、Springboot启动过程中用到的部分事件三、Springboot中的监听器四、自定义事件源,事件监听器和事件发布器4.1 目录结构4.2 事件源4.3 事件监听器4.4 事件帮助器4.4.1 事件发布帮助接口4.4.2 事件发布帮助接口实现类4.4…

运维就业现状怎么样?技能要求高吗?

运维至少需要知道哪些知识才可以去面试? 有一个答案对这一话题的解读非常深入,体系化的分析了所需掌握的技术、工作内容、性质及可发展的方向等等,今天特别分享给大家,按照这个发展,运维则已不需担心就业、薪酬等问题了…

MySQL -2 指令

客户端SQL指令记录: -- 针对 数据库和针对数据表 (一)数据库 1. 查看当前所有数据库:show databases; 2. 创建数据库:create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 3. 删除数据库&#…

【一建、一造经验分享】一建挺难的,要坚持才能得到

标签:【备考四年】、【2020全科通过一建】、【2021全科通过一造】 思绪回到2017年7月份,软考-项目管理师出成绩了,很幸运我通过了。由于通信行业及单位认可“以考代评”,所以我最先下手的是软考高级,拿证等同于高工。在…

程序员核心------详解调试(2)

所爱隔山海,山海皆可平,所念皆星河,星河不可及。 上课! 接着上节课讲的调试(1),本节课进一步讲解调试(2). 文章目录1.调试实例讲解(2)校招笔试题 2.如何写出好的&#…

【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)

MapReduce是Hadoop系统核心组件之一,它是一种可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是目前分布式计算模型中应用较为广泛的一种。 一、MapReduce核心思想 MapReduce的核心思想是“分而治之”。所谓“分而治之…

猿人学APP第一题

抓包分析 copy CURL 转 requests代码 def app1():import requestsheaders {"Accept-Language": "zh-CN,zh;q0.8","User-Agent": "Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; Nexus 6P Build/OPM1.171019.011) AppleWebKit/534.30 (K…

KT6368A蓝牙芯片的MTU的说明以及如何加快BLE传输速率

目录 一、蓝牙MTU的简介 二、详细的方法说明以及测试 三、KT6368A提升ble传输速率方法 BLE传输带宽主要跟两个要素有关: 通信周期和每个通信点可传输的数据量。 1.通信周期: 安卓手机一般可支持到10ms,苹果一般可支持到15ms 2.每个通信点…

[附源码]Node.js计算机毕业设计高校实习管理平台系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

菁染料CY3-聚乙二醇-二苯并环辛炔 CY3-PEG-DBCO

产品名称:菁染料CY3-聚乙二醇-二苯并环辛炔 英文名称: CY3-PEG-DBCO 分子量:1k,2k,3.4k,5k,10k,20k(可按需定制) 质量控制:95% 原料分散系…

SSM校园疫情防控

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 管理员功能: 教职工管理(管理已注册的教职工) 出入管理(出入日期、人员姓…

若依缓存使用浅析

配置 这块主要涉及两个类 FastJson2JsonRedisSerializer : 继承 RedisSerializer 接口自定义使用 fastjson 进行序列化和反序列化RedisConfig:配置使用 StringRedisSerializer 来进行key的序列化与反序列,使用刚才我们 FastJson2JsonRedisSerializer 来…

通过WSL2运行GUI程序

上次我写过一篇VGPU和WSL2,这回我打算写一篇关于《通过WSL2运行GUI程序》的笔记。 起因 总所周知,KVM in Linux支持GPU passthrough(GPU直通)功能的,就是配置稍稍多了一点。最初想试试如何在Hyper-V中尝试安装VM,但是vgpu的文档…

2022-12-14 jedis

jedis 简介 编程语言与redis java语言连接redis服务 jedis SpringDataRedis Lettuce HelloWorld 客户端连接redis maven下载安装 配置maven环境变量 库的种类和彼此的关系 maven标准目录结构 核心代码部分配置文件部分测试代码部分测试配置文件 maven常用的命令 mvn…

nodejs+vue083新生报到服务管理系统

目 录 摘 要 I 目 录 III 第一章 概述 1 1.1研究背景 1 1.2 开发意义 1 1.3 研究现状 1 1.4 研究内容 2 1.5 论文结构 2 第二章 开发技术介绍 1 2.5 B/S架构 2 第三章 系统分析 1 3.1 可行性分析 1 3.1.1技术可行性 1 3.1.2操作可…

python绘制圣诞树、烟花、爱心及节日倒计时

说明: 该博客主要完成以下几个方面的功能: 1.元旦节日倒计时代码的实现 2.使用python源码“绘制圣诞树” 3.使用python绘制“跨年烟花” 4.使用python 绘制“爱心” 呈现方式:代码和截图 1.元旦倒计时代码: 输入相应的节日时间&#…

Seata - @GlobalTransactional源码解析

脑图 核心 Seata三大角色 TC :事务协调者,netty server(服务器)TM :事务管理器,netty client(客户端)RM: 资源管理器,netty client(客户端) GlobalTransactional(name "fsp-create-order" ro…

【静脉检测】手指静脉图像检测【含Matlab源码 1654期】

⛄一、简介 手指静脉识别系统的性能非常依赖于采集图像的质量,但是采集设备在成像和传输时产生的各类噪声,以及开放式使用场景下设备镜面上存在脏污、用户手指存在蜕皮情况等因素都会对图像质量造成极大的影响,增大后续特征提取的难度,最终影响整个系统的识别性能。针对目前现…