netty之helloworld

简介: netty网络编程的学习

首先引入netty的依赖

       <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.39.Final</version>
        </dependency>

然后编写服务端代码

package com.wxit.netty.c1;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringDecoder;

/**
 * @author wj
 * @date 2022.11.14 22:08
 */
public class HelloServer {
    public static void main(String[] args) {
        //1.启动器,负责组装netty 组件,启动服务器
        new ServerBootstrap()
                //2. BossEventLoop WorkEventLoop(selector,thread) group 组
                .group(new NioEventLoopGroup())
                //3.选择服务器的ServerSocketChannel 实现
                .channel(NioServerSocketChannel.class)
                //4.boss 负责处理连接 work(child) 负责处理读写 ,决定了worker能执行哪些操作
                .childHandler(
                        //5.channel 代表和客户端进行数据读写的通道 Initializer 初始化,负责添加别的handler
                    new ChannelInitializer<NioSocketChannel>() {
                    @Override
                    protected void initChannel(NioSocketChannel ch) throws Exception {
                        //6.添加具体的handler
                       ch.pipeline().addLast(new StringDecoder());
                       //自定义handler
                       ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
                           @Override  //读事件
                           public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                               System.out.println(msg);
                           }
                       });
                    }
                })
                .bind(8080);
    }
}

客户端代码如下


import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringEncoder;

import java.net.InetSocketAddress;

/**
 * @author wj
 * @date 2022.11.14 22:22
 */
public class HelloClient {
    public static void main(String[] args) throws InterruptedException {
        //1.启动类
        new Bootstrap()
                //2.添加EventLoop
                .group(new NioEventLoopGroup())
                //3.选择客户端 channel 实现
                .channel(NioSocketChannel.class)
                //4.添加处理器
                .handler(new ChannelInitializer<NioSocketChannel>() {
                    @Override  //在建立连接之后被调用
                    protected void initChannel(NioSocketChannel ch) throws Exception {
                        ch.pipeline().addLast(new StringEncoder());
                    }
                })
                //5.连接到服务器
                .connect(new InetSocketAddress("localhost",8080))
                .sync()
                .channel()
                //6.向服务器发送数据
                .writeAndFlush("hello,world");
    }
}
相关文章
|
11月前
|
机器学习/深度学习 数据采集 人工智能
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
层次化Softmax算法通过引入Huffman树结构,将传统Softmax的计算复杂度从线性降至对数级别,显著提升了大规模词汇表的训练效率。该算法不仅优化了计算效率,还在处理大规模离散分布问题上提供了新的思路。文章详细介绍了Huffman树的构建、节点编码、概率计算及基于Gensim的实现方法,并讨论了工程实现中的优化策略与应用实践。
272 15
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
|
11月前
|
应用服务中间件 定位技术 网络安全
理解住宅IP和运营商IP的不同应用场景
随着数字化时代的发展,网络安全与隐私保护成为核心需求,代理IP因其技术优势受到关注。本文介绍了住宅IP与运营商IP的区别,包括定义、使用场景、安全性、成本及地理位置等方面,帮助用户根据需求选择合适的IP类型。
300 8
|
人工智能 NoSQL Cloud Native
《Java开发手册》 | 技术日报(6期)
《Java开发手册》始于阿里内部规约,在全球Java开发者共同努力下,已成为业界普遍遵循的开发规范。手册涵盖编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程规约、设计规约七大维度。此次泰山版发布,将带来三大亮点:新增5条日期时间规约;新增2条表别名sql规约;新增统一错误码规约。
955 0
|
算法 网络协议 Java
【Java】留下没有基础眼泪的面试题
计算机/Java基础面试题
10051 0
|
9天前
|
人工智能 数据可视化 Java
Spring AI Alibaba、Dify、LangGraph 与 LangChain 综合对比分析报告
本报告对比Spring AI Alibaba、Dify、LangGraph与LangChain四大AI开发框架,涵盖架构、性能、生态及适用场景。数据截至2025年10月,基于公开资料分析,实际发展可能随技术演进调整。
764 150
|
3天前
|
负载均衡 Java Maven
OpenFeign:让微服务调用像本地方法一样简单
OpenFeign是Spring Cloud的声明式HTTP客户端,通过接口+注解方式简化微服务间调用。无需手动编写请求代码,像调用本地方法一样发起远程调用,支持负载均衡、熔断降级、请求拦截等特性,极大提升开发效率与系统可靠性。
252 156