【Netty 网络通信】启动客户端连接服务端实现通信

简介: 【1月更文挑战第9天】【Netty 网络通信】启动客户端连接服务端实现通信

Netty概述:

https://netty.io/

Netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务端和客户端。Netty封装了JDKNIO

如何启动客户端连接到服务端?

引入Maven依赖:

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


创建客户端代码,连接Netty服务端,并向服务端发送数据:

// 1.创建客户端的启动类:
new Bootstrap()
    // 2.指定EventLoop事件轮询器分组:
    .group(new NioEventLoopGroup())
    // 3.指定SocketChannel通道实现:
    .channel(NioSocketChannel.class)
    // 4.添加处理器:
    .handler(new ChannelInitializer<NioSocketChannel>() {
        // 连接建立完成之后被调用:
        @Override
        protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception {
            nioSocketChannel.pipeline().addLast(new StringEncoder());
        }
    })
    // 5.连接到服务器:
    .connect("localhost", 8080)
    // 指定阻塞方法,直到连接建立完成
    .sync()
    // 获取连接对象,通过连接对象发送数据
    .channel()
    // 6.向服务端发送数据:
    .writeAndFlush("hell,Netty!");


在上述代码中,需要替换YourClientHandler为你自己定义的处理器,该处理器将处理接收到的数据。可以通过继承ChannelInboundHandlerAdapter类并重写相应的方法来实现自己的处理器。

  1. 创建 EventLoopGroup: 在客户端中,你需要创建两个 EventLoopGroup 实例,一个用于处理客户端的连接,另一个用于处理I/O操作。EventLoopGroup 是一个处理事件循环的线程池。通常,NioEventLoopGroup 是用于客户端的良好选择。
EventLoopGroup group = new NioEventLoopGroup();
  1. 创建 Bootstrap:Bootstrap 类被用于设置客户端。你需要配置它以指定使用的 EventLoopGroup、通道类型、连接选项等。
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(group)
         .channel(NioSocketChannel.class)
         .option(ChannelOption.TCP_NODELAY, true)
         .handler(new ChannelInitializer<SocketChannel>() {
             @Override
             protected void initChannel(SocketChannel ch) {
                 // 添加客户端处理器
                 ch.pipeline().addLast(new YourClientHandler());
             }
         });
  1. 连接到服务端: 使用 connect 方法连接到远程服务器。
ChannelFuture future = bootstrap.connect(serverHost, serverPort).sync();

这将返回一个 ChannelFuture 对象,它表示连接的异步操作。通过调用 sync() 方法,你可以阻塞直到连接完成。

  1. 等待连接关闭: 使用 closeFuture().sync() 来阻塞,直到连接关闭。
future.channel().closeFuture().sync();
  1. 释放资源: 在关闭应用程序之前,确保关闭 EventLoopGroup 以释放所有资源。
group.shutdownGracefully();
相关文章
|
1月前
|
安全 网络安全 网络虚拟化
【软件设计师备考 专题 】常用网络设备和各类通信设备(一)
【软件设计师备考 专题 】常用网络设备和各类通信设备
97 2
|
1月前
|
网络协议 网络安全 网络虚拟化
网络技术基础(10)—— VLAN间通信
【3月更文挑战第2天】网络基础笔记(加班了几天,中途耽搁了,预计推迟6天),这篇借鉴了之前师兄的笔记,边听边记笔记实在是太慢了。
|
2月前
|
网络协议
Netty实现TCP通信
Netty实现TCP通信
43 0
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
15天前
|
网络协议 Java 物联网
Spring Boot与Netty打造TCP服务端(解决粘包问题)
Spring Boot与Netty打造TCP服务端(解决粘包问题)
26 1
|
15天前
|
移动开发 网络协议 Java
通信密码学:探秘Netty中解码器的神奇力量
通信密码学:探秘Netty中解码器的神奇力量
20 0
|
18天前
|
安全 网络安全 SDN
虚拟网络设备的真正使命:实现有控制的通信
虚拟网络设备确实提供了强大的网络隔离能力🛡️,但这种隔离本身并不是最终目的。实际上,更重要的是通过这种隔离能力实现有控制的通信🎛️,以满足特定的业务需求、安全要求和性能标准。换句话说,网络隔离是手段,而有控制的通信才是目的🎯。
虚拟网络设备的真正使命:实现有控制的通信
|
29天前
|
存储 运维 安全
云擎技术:通信网络单元定级备案指南
简介: 通信网络单元定级备案是指相关基础电信企业、增值电信企业要对本单位管理、运行的公用通信网和互联网及其各类信息系统进行单元划分,按照《通信网络安全防护管理办法》(工业和信息化部令第11号)的规定开展定级工作,并在工业和信息化部“通信网络安全防护管理系统”报送各单元的定级信息。
31 2
|
存储 设计模式 网络协议
Netty网络框架(一)
Netty网络框架
34 1
|
30天前
|
NoSQL Redis
Netty实战:模拟Redis的客户端
Netty实战:模拟Redis的客户端
14 0