Java网络多线程——UDP编程

2023-11-17

UDP编程通信

基本介绍

  1. 类DatagramSocket和DatagramPacket【数据包/数据报】实现了基于UDP协议网络程序。
  2. UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能安全送到目的地,也不确信什么时候可以抵达。
  3. DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
  4. UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。

基本流程

  1. 核心的两个类/对象DatagramSocket域DatagramPacket
  2. 建立发送端,接收端。
  3. 建立数据包
  4. 调用DatagramSocket的发送、接收方法
  5. 关闭DatagramSocket。

UDP网络编程原理示意图

在这里插入图片描述
UDP说明:

  • 没有明确的服务端和客户端,演变成数据的发送端和接收端。
  • 接收数据和发生数据是通过DatagramSocket对象完成。
  • 将数据封装到DatagramPacket对象/装包。
  • 当接收到DatagramPacket对象,需要进行拆包,取出数据
  • DatagramSocket可以指定在哪个端口接收数据。
package com.study.srv.demo18;


import java.io.IOException;
import java.net.*;

/**
 * @author Wen先森
 * @version 1.0
 * @date 2022/7/18 14:03
 * UDP发送端
 */
public class Demo11 {
    public static void main(String[] args) throws IOException {
        //1.创建DatagramSocket对象,准备发送和接收数据,在9998端口接收
        DatagramSocket datagramSocket = new DatagramSocket(9998);

        //2.将需要发送的数据,封装到DatagramPacket对象
        String s="发送的数据";
        byte[] buf=s.getBytes();
        InetAddress ip = InetAddress.getByName("192.168.0.18");
        //说明:封装的DatagramPacket对象
        //buf 内容字节数组
        //buf.length 数据长度
        //ip 主机(ip)
        //9999 端口
        DatagramPacket packet = new DatagramPacket(buf, buf.length, ip, 9999);
        //发送数据
        datagramSocket.send(packet);
        //关闭资源
//        datagramSocket.close();
        System.out.println("发送完毕");

        //发送端变为接收端接收数据
        byte[] bytes = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
        datagramSocket.receive(datagramPacket);
        int length = datagramPacket.getLength();
        byte[] data = datagramPacket.getData();
        String string = new String(data, 0, length);
        System.out.println(string);
        datagramSocket.close();
        System.out.println("接受结束");
    }
}
package com.study.srv.demo18;


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

/**
 * @author Wen先森
 * @version 1.0
 * @date 2022/7/18 14:03
 *UDP接收端
 */
public class Demo10 {
    public static void main(String[] args) throws IOException {
        //1.创建一个 DatagramSocket对象,准备在9999接收数据
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        //2.构建一个DatagramPacket 对象,准备接收数据
        //在UDP协议,一个数据包最大64k
        byte[] buf=new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3.接收方法 将通过网络传输的DatagramPacket对象填充到packet里去。
        System.out.println("接收端等待接收");
        datagramSocket.receive(packet);
        //4.可以对packet进行拆包,取出数据,并显示
        //实际接收到的数据字节长度
        int length = packet.getLength();
        //实际接收到的数据
        byte[] data = packet.getData();
        String string = new String(data, 0, length);
        System.out.println(string);


        //5.关闭资源
//        datagramSocket.close();
        System.out.println("接收结束");

        //接收端变为发送端,发送数据
        String s="接收端变为发送端,发送数据";
        byte[] bytes=s.getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.0.18"), 9998);
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
        System.out.println("发送完毕");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java网络多线程——UDP编程 的相关文章

随机推荐

  • Linux下minicom的配置和使用方法

    安装配置minicom lsmod grep usbserial 如果直接使用串口线 而没有用到USB转串口设备 此步可以跳过 如果有usbserial 说明系统支持USB转串口 安装minicom Fedora自带有minicom 此步可
  • shell 守护进程之 mongodb

    场景 因为某些原因 mongodb 挂掉了 需要重启 思路 写个守护进程脚本 每分钟查看mongodb状态 这里查看mongodb进程是否存在 如果挂掉就重启 执行 1 创建sh文件 mkdir p data wwww guard mong
  • it技术交流社区与学习资料的网站大全

    点击上方蓝字 优派编程 选择 加为星标 第一时间关注原创干货 对国内技术社区 博客园 https www cnblogs com 掘金 https juejin cn 思否 https segmentfault com 开源中国 https
  • Ubuntu18.04升级到20.04

    升级方式 命令行升级 正常情况下使用如下命令即可 sudo do release upgrade 当提示如下错误信息时 得先升级本地软件包 Please install all available updates for your rele
  • 区块链的简单实现

    区块链的简单实现 什么是区块链 块结构 创世区块 hash 验证块的有效性 记录数据 从其他节点接收一个块 编写测试代码 测试结果 完整代码 什么是区块链 一个维护着一个持续增长的有序数据记录列表的这么一个分布式数据库 下面我将简单用nod
  • 玩转X-CTR100 l STM32F4 l U-Blox NEO-6M GPS卫星定位-nmealib解码库移植解码

    我造轮子 你造车 创客一起造起来 塔克创新资讯 塔克社区 www xtark cn 塔克博客 www cnblogs com xtark 本文介绍X CTR100控制器 扩展GPS卫星定位模块 型号为GY GPS6MV2 使用U BLOX
  • 数据库连接自动断开:CJCommunicationsException

    报错信息 com mysql cj exceptions CJCommunicationsException The last packet successfully received from the server was 99 117
  • JavaSE基础知识(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 基础 杂记 JRE JVM 常用类库 JDK JRE 诸多工具 如j
  • vue 循环遍历 搜寻资料

    写vue 循环遍历的 大全例子解释 转载连接 https www cnblogs com xulei1992 p 6015416 html https www jqhtml com 49765 html https blog csdn ne
  • mysql truncate语句_MySQL DELETE语句和TRUNCATE TABLE语句的区别

    在MySQL数据库中 DELETE语句和TRUNCATE TABLE语句都可以用来删除数据 但是这两种语句还是有着其区别的 下文就为您介绍这二者的差别所在 MySQL DELETE语句和TRUNCATE TABLE语句功能相似 但是二者究竟
  • Unity 游戏入门 九、 精灵动画 Sprite Animation

    1 Animator 为了在游戏对象上有动画 需要添加一个组件Animator 在工程窗口中 双击Robot 预制体 如图所示 添加Animator组件 2 Creating a New Controller 在工程窗口Animator文件
  • 分组排序取前几条之子查询和用户变量的使用

    关于一次面试的sql题 题目 在一张订单表中有三个字段 order id sale num type 类型有 衣服 鞋子 皮包 现在希望取出每种类型销量前三的记录 我在面试时候还想 啥 啥玩意 要我写单表的查询 看不起我 这不就是group
  • [QT编程系列-31]:多线程机制 - Qthread工作原理

    目录 一 Qthread工作原理 二 QThread的start 方法 三 QT 线程的生命周期 四 事件循环机制 五 QThread自带信号 六 如何在run函数中多次执行 七 QThread什么时候发送finished信号 八 为什么不
  • VS2019运行报错:引发了未经处理的异常:读取访问权限冲突。_Pnext 是 0xE。

    我们在运行VS2019代码时 报错如下信息 反复检查了代码 发现代码是没有问题的 我的代码如下 include
  • 用Java写一个五子棋小游戏

    棋盘是15 15 可以自己规定 游戏规则 1 对局双方各执一色棋子 2 空棋盘开局 3 黑先 白后 交替下子 每次只能下一子 4 棋子下在棋盘的空白点上 棋子下定后 不得向其它点移动 不得从棋盘上拿掉或拿起另落别处 5 黑方的第一枚棋子可下
  • vue form表单最简写法

    vue form表单最简单写法 div div
  • 均值不等式链的几何证明

    均值不等式链的几何证明 这是我们高中时所见到的不等式链的关系 接下来将用几何图形的方法进行证明 首先 做圆 A 直径 BC 在圆上异于 BC 取一点 D 连接 DA DB DC 并做 DE 垂直与 BC 交 BC 与点 E 设 CE a B
  • springbooot_如何正确使用mybatis连接mysql

    MyBatis不是spring旗下的框架 所以在springboot中使用还是需要配置一下 不过配置非常简单 1 第一步 创建springboot项目 需要联网 2 第二步 就是给项目起名的一些操作 完成后点击next 3 第三步 别忘了在
  • CK-GW208-EC与汇川PLC配置走EtherCAT通讯指南

    CK GW208 EC这款产品是晨控智能一款工业级 IO LINK 主站网关 支持 EtherCat 工业协议 可通过以太网接口 对 IO LINK 从站设备进行控制 CK GW208 EC 是一款支持标准工业 Ethercat协议的 IO
  • Java网络多线程——UDP编程

    UDP编程通信 基本介绍 类DatagramSocket和DatagramPacket 数据包 数据报 实现了基于UDP协议网络程序 UDP数据报通过数据报套接字DatagramSocket发送和接收 系统不保证UDP数据报一定能安全送到目