Netty UDP通信Demo

2023-05-16

1.服务端代码

package udp;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.DatagramPacket;
import io.netty.channel.socket.nio.NioDatagramChannel;

public class UdpServer {

public static void main(String[] args) {
    try {
        Bootstrap b = new Bootstrap();
        EventLoopGroup group = new NioEventLoopGroup();
        b.group(group)
                .channel(NioDatagramChannel.class)
                .option(ChannelOption.SO_BROADCAST, true)
                .handler(new UdpServerHandler());

        b.bind(2555).sync().channel().closeFuture().await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

private static class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {
        ByteBuf buf = packet.copy().content();
        byte[] req = new byte[buf.readableBytes()];
        buf.readBytes(req);
        String body = new String(req, "UTF-8");
        System.out.println(body);//打印收到的信息
        //向客户端发送消息
        String json = "来自服务端: 南无阿弥陀佛";
        // 由于数据报的数据是以字符数组传的形式存储的,所以传转数据
        byte[] bytes = json.getBytes("UTF-8");
        DatagramPacket data = new DatagramPacket(Unpooled.copiedBuffer(bytes), packet.sender());
        ctx.writeAndFlush(data);//向客户端发送消息
    }
}

}

2.客户端代码

package udp;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.Unpooled;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.DatagramPacket;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.util.CharsetUtil;

import java.net.InetSocketAddress;

public class UdpClient {

public static final int MessageReceived = 0x99;
private static int scanPort = 2555;

public UdpClient(int scanPort) {
    this.scanPort = scanPort;
}


private static class CLientHandler extends SimpleChannelInboundHandler<DatagramPacket> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {
        String body = packet.content().toString(CharsetUtil.UTF_8);
        System.out.println(body);
    }
}

public static void main(String[] args) {

    EventLoopGroup group = new NioEventLoopGroup();
    try {
        Bootstrap b = new Bootstrap();
        b.group(group)
                .channel(NioDatagramChannel.class)
                .handler(new CLientHandler());

        Channel ch = b.bind(0).sync().channel();

        ch.writeAndFlush(new DatagramPacket(
                Unpooled.copiedBuffer("来自客户端:南无本师释迦牟尼佛", CharsetUtil.UTF_8),
                new InetSocketAddress("127.0.0.1", scanPort))).sync();

        ch.closeFuture().await();

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        group.shutdownGracefully();
    }
}

}

3.分别启动

这里写图片描述

这里写图片描述

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

Netty UDP通信Demo 的相关文章

  • 如何监听任意端口的广播包?

    使用 NET 如何在任何端口上侦听发送到 255的udp广播数据包 而不需要绑定到特定端口 我自己找到了办法 它是这样工作的 mainSocket new Socket AddressFamily InterNetwork SocketTy
  • Netty 处理程序未调用

    我正在尝试使用简单的服务器客户端应用程序进入 Netty 代码见下文 我正在努力解决两个问题 ConfigServerHandler 分别ConfigClientHandler 被正确调用 但是 FeedbackServerHandler
  • Go:如何接收整个 UDP 数据报

    我的问题 使用 net Read 方法仅复制给定字节数组或切片大小的字节数 当然 我不想每次都分配最大 64 kB 的 UDP 数据报 有没有go如何确定数据报的大小 位于数据报头中 或再次读取直到数据报完全读取 Try 从UDP读取 ht
  • 如何在QT中发送和接收UDP数据包

    我正在 QT 中编写一个小型应用程序 它通过本地网络发送广播 UDP 数据包 并等待来自网络上的一个或多个设备的 UDP 响应数据包 创建套接字并发送广播数据包 udpSocketSend new QUdpSocket this udpSo
  • netty 4.x.x 中的 UDP 广播

    我们需要使用 Netty 4 0 0 二进制文件通过 UDP 通道广播对象 Pojo 在 Netty 4 0 0 中 它允许我们仅使用 DatagramPacket 类来发送 UDP 数据包 此类仅接受 ByteBuf 作为参数 还有其他方
  • 互联网上的 UDP 多播?

    我不确定如何最好地解决我的问题 我有一个在远程计算机上运行的服务 用于接收和处理 UDP 数据包 我希望该服务能够将这些数据包重新发送给任何需要它们的人 可能是任何人 通常是一台机器 但也可能更多 我认为 UDP 多播将是理想的 该服务可以
  • 在 Perl 中如何接受多个 TCP 连接?

    我对 Linux 的 Perl 脚本有疑问 它的主要目的是成为 3 个应用程序之间的中间人 它应该做什么 它应该能够等待 UDP 文本 不带空格 udp port 当它收到 UDP 文本时 它应该将其转发到连接的 TCP 客户端 问题是我的
  • 不同的 Netty 版本及其用途

    我现在使用Netty有一段时间了 但永远无法解决这个问题 一个人可以下载四个不同的版本 其中三个正在积极开发中 3 x 4 0 x 4 1 x 5 x 据我了解 3 x 适用于 JRE 1 5 而 JRE 的其他所有版本都高于此版本 我使用
  • 为什么我们可以将 sockaddr 转换为 sockaddr_in

    我明白为什么强制转换很有用sockaddr to sockaddr in 但我不明白这怎么可能 据我所知 它们的大小相同sockaddr in添加了sin zero使其大小相同 我想知道编译器如何知道从哪里获取信息sockaddr in如果
  • 自 2012 年以来,WinSock 注册 IO 性能是否有所下降?

    我最近使用 MS 为该 API 提供的稍微可接受的文档编写了基于 WinSock Registered IO RIO 的 UDP 接收 最终的性能非常令人失望 单套接字性能有些稳定 约为每秒 180k 数据包 使用多个 RSS 队列 即多个
  • 在 macOS 10.12 上绑定到套接字时出现 NSPOSIXErrorDomain

    我正在玩CocoaAsyncSocket https github com robbiehanson CocoaAsyncSocket在 Swift 中绑定到 UDP 套接字并通过本地网络接收消息 我正在初始化一个套接字 并尝试绑定到一个端
  • 视频流上的 TCP 与 UDP

    我刚从网络编程考试回来 他们问我们的问题之一是 如果您要传输视频 您会使用 TCP 还是 UDP 请解释一下存储视频和实时视频流 对于这个问题 他们只是希望得到一个简短的答案 TCP 用于存储视频 UDP 用于实时视频 但我在回家的路上想到
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • 错误号:11,资源暂时不可用

    我正在使用 c 套接字来实现可靠的 UDP 协议 我正在使用以下代码在等待确认的套接字上设置超时 我不确定为什么会收到 errno 11 资源暂时不可用 set timer for recv socket struct timeval tv
  • UDP接收和发送Matlab

    我目前正在努力从外部设备接收数据包 然后将数据发送到另一个设备 我有一个工作 Simulink 模型 但我不知道如何在 Matlab 中对其进行编码 Matlab 中 UDP 接收块的参数如下图所示UDP 接收参数 https i stac
  • 从不同进程通过套接字 (UDP) 回复客户端

    我有一个服务器而不是 命令处理程序 进程 它通过 UDP 接收消息 并通过其发布的 API 无论该进程采用何种 IPC 机制 与该进程进行通信 从而将要做的工作委托给不同的进程 我们的系统有多个协作进程 然后 该 API 调用的结果会从命令
  • 管理软件的演示版本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个用VB6编写的软件产品 它是一个付费软件产品 有1个月的演示版本 演示版本没有单独的安装文件 输入产品密钥后 软件会将演示版本
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • 服务器作为 WebRTC 数据通道对等点

    目前是否有解决方案可以让您的服务器充当 WebRTC 连接的对等端 我对 WebRTC 感兴趣的原因不是它的点对点部分 而是因为它使您能够使用 UDP 您可以让玩家参与像 雷神之锤 这样的快节奏游戏 而无需任何插件 看来本质上是同一个问题之
  • 如何在其他核心上运行每个线程?

    我有一个 udp 服务器接收数据并计算它 每个角色我都有两个线程 我的CPU是8个多核 我以不同的速度发送数据 但最多我只使用了 cpu 两核 50 的 14 如果我发送更多的数据值 我的缓冲区将填满并且不会使用更多的CPU 为什么每个核心

随机推荐

  • AngularJs与ReactJS优缺点&适用场景

    Angular的优缺点 xff1a 优点 AngularJS是一套完整的框架 xff0c angular有自带的数据绑定 render渲染 angularUI库 过滤器 directive 模板 服务 q defer http xff0c
  • Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'inform

    Expression 1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 39 information schema PROFIL
  • rabbitmq的消息持久化处理开启,再关闭后,消费者启动报错

    今天在测试rabbitmq的消息持久化处理时 xff0c 一切顺利 xff0c 可是再想测试ACK消息确认机制时 xff0c 消费者却无法启动了 xff0c 报如下错误 xff1a org springframework amqp rabb
  • VMware下Linux无法播放声音的解决方案

    问题背景 宿主机环境 xff1a Windows 10 VMware Workstation版本 xff1a VMware Workstation 12 VMware Workstation 15 客户机环境 xff1a CentOS 7
  • pip更新及Requirement already up-to-date解决方法

    pip更新及Requirement already up to date解决方法 文 xff1a 铁乐与猫 2018 9 11 更新命令 将pip更新到最新版本 python m pip install upgrade pip Anacon
  • 如何高效的使用适配器Adapter

    如何高效的使用适配器Adapter 当我们在使用ListView GridView时 xff0c 都会给其设置相应的适配器 xff0c 用来给其设置数据 xff0c 会去继承BaseAdapter xff0c 重写getCount getI
  • kotlin 没有@Parcelable注解

    在使用kotlin的时候 xff0c 有的时候需要对实体类进行序列化的操作 序列化的方式就两种 xff0c 一种是Serializable xff0c 一种是Parcelable 在android中 xff0c 基本都是使用的Parcela
  • Android studio3.0+ 编译Lame库(CMake方式)

    最近在学习音视频方面的知识 xff0c 购买了音视频开发进阶指南 xff0c 在交叉编译LAME库的时候 xff0c 书中使用的还是旧版本的编译方式 xff0c 现在android studio在2 2以后就开始使用CMake的编译方式了
  • 打印正整数n拆分的所有情况

    题目 xff1a 把一个正整数n拆分成若干个正整数的相加 xff0c 列出所有组合 例如 xff1a 4 61 4 4 61 1 43 3 61 2 43 2 4 61 1 43 1 43 2 4 61 1 43 1 43 1 43 1 动
  • redis实现积分排行榜

    在项目开发中常常遇到一些积分排行的问题 一个典型的积分行榜包括以下常见功能 xff1a 能够记录每个用户的分数 xff1b 能够对用户的分数进行更新 xff1b 能够查询每个用户的分数和名次 xff1b 能够按名次查询排名前N名的用户 xf
  • 如何减小Ubuntu 16.04系统下VMware虚拟机硬盘空间占用过大问题

    VMware虚拟机占用硬盘空间只增大不减少 xff0c 即使你删除文件 xff0c 占用的硬盘空间也不释放 用了一段时间后空间不够了 解决办法 方法一 在vmware的安装目录下 xff0c 有一个vmware vdiskmanager 关
  • 使用Redis实现积分排行榜,并支持同积分按时间排序

    排行榜这个功能很常见 xff0c 多用于激励用户活跃和拉新 xff0c 比如CSDN平台实现的周榜 xff0c 按照每周文章总阅读量进行排名 xff0c 用排名和奖品激励用户持续在平台上输出高质量内容 最近笔者也做了一个积分排行榜的功能 x
  • 神奇的排序

    代码 xff1a 此方法只能对互不相同的正整数排序 xff0c 也成为神奇的排序 xff0c 从编程珠玑中看到的 public class magicSort public static void main String args TODO
  • 学会自己测天气之 起卦篇

    找三个一元的硬币 xff0c 找一个安静的没人的地方 xff0c 把钱合在掌内反复摇动 xff0c 心中反复问神灵你想问的事情 然后抛出硬币 xff0c 记录反面 xff08 有花的那面 xff09 的数量 xff08 总共有四种情况 xf
  • Java 使用 jdbc 连接 mysql

    首先要下载Connector J地址 xff1a http www mysql com downloads connector j 这是MySQL官方提供的连接方式 xff1a 解压后得到jar库文件 xff0c 需要在工程中导入该库文件
  • 找零钱的方案数以及所需最少张数的钞票的方案

    问题描述 xff1a 我们知道人民币有1元 xff0c 2元 xff0c 5元 xff0c 10元 xff0c 20元 xff0c 50元 xff0c 100元这几种表示 xff0c 现在给你一个整数 n 让你找零 xff0c 求出有多少种
  • 2017京东校招编程题 烽火台

    描述 xff1a n 个 烽火台围成一个圈 xff0c 任意两个烽火台只要中间的烽火台比他们两个都低就能看见彼此 xff0c 当然相邻的肯定能看见对面 xff0c 求能看见彼此的对数 输入 5 烽火台的个数 3 2 5 4 1 烽火台的高地
  • 利用Oh-My-Zsh打造你的超级终端

    什么是Zsh Zsh是一款强大的虚拟终端 xff0c 既是一个系统的虚拟终端 xff0c 也可以作为一个脚本语言的交互解析器 Zsh的一些特性 兼容bash xff0c 原来使用bash的兄弟切换过来毫无压力 强大的历史纪录功能 xff0c
  • netty源码分析(二十五)Netty自定义协议与TCP粘包拆包问题解决之道

    上一节说了TCP的粘包和拆包 xff0c 用一个实例的方式做了说明 xff0c 那么在netty里面是怎么解决粘包和拆包问题呢 xff0c 这就需要编解码器 xff0c 我们写一个简单的自动以协议的demo xff0c 说明一下编解码器在解
  • Netty UDP通信Demo

    1 服务端代码 package udp import io netty bootstrap Bootstrap import io netty buffer ByteBuf import io netty buffer Unpooled i