【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();
相关文章
|
2月前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
201 0
|
5月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
287 61
|
3月前
|
Windows
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
78 0
|
5月前
|
运维 网络协议 Go
Go网络编程:基于TCP的网络服务端与客户端
本文介绍了使用 Go 语言的 `net` 包开发 TCP 网络服务的基础与进阶内容。首先简述了 TCP 协议的基本概念和通信流程,接着详细讲解了服务端与客户端的开发步骤,并提供了简单回显服务的示例代码。同时,文章探讨了服务端并发处理连接的方法,以及粘包/拆包、异常检测、超时控制等进阶技巧。最后通过群聊服务端的实战案例巩固知识点,并总结了 TCP 在高可靠性场景中的优势及 Go 并发模型带来的便利性。
|
Ubuntu 网络协议 Unix
02理解网络IO:实现服务与客户端通信
网络IO指客户端与服务端通过网络进行数据收发的过程,常见于微信、QQ等应用。本文详解如何用C语言实现一个支持多客户端连接的TCP服务端,涉及socket编程、线程处理及通信流程,并分析“一消息一线程”模式的优缺点。
230 0
|
6月前
|
编解码 安全 Java
Netty源码—1.服务端启动流程
本文主要介绍了服务端启动整体流程及关键方法、服务端启动的核心步骤、创建服务端Channel的源码、初始化服务端Channel的源码、注册服务端Channel的源码、绑定服务端端口的源码、服务端启动流程源码总结。
|
6月前
|
弹性计算 网络协议 Java
Netty基础—2.网络编程基础二
本文介绍了网络编程的基本概念和三种主要模式:BIO(阻塞IO)、AIO(异步IO)和NIO(非阻塞IO)。BIO模型通过为每个客户端连接创建一个线程来处理请求,适合客户端较少的情况,但在高并发下性能较差。AIO模型通过异步IO操作,允许操作系统处理IO,适合高并发场景,但编码复杂且Linux支持有限。NIO模型通过Selector实现多路复用,适合高并发且性能要求高的场景。文章还详细介绍了NIO中的Buffer、Selector、Channel等核心组件,并提供了NIO的实战开发流程和代码示例。
|
6月前
|
监控 网络协议 Java
Netty基础—1.网络编程基础一
本文详细介绍了网络通信的基础知识,涵盖OSI七层模型、TCP/IP协议族及其实现细节。首先解释了OSI模型各层功能,如物理层负责数据通路建立与传输,数据链路层提供无差错传输等。接着探讨了TCP/IP协议,包括TCP和UDP的特点、三次握手与四次挥手过程,以及如何通过确认应答和序列号确保数据可靠性。还分析了HTTP请求的传输流程和报文结构,并讨论了短连接与长连接概念。 此外,解析了Linux下的IO模型,包括阻塞IO、非阻塞IO、IO复用(select/poll/epoll)、信号驱动IO和异步IO的特点与区别,强调了epoll在高并发场景下的优势及其水平触发和边缘触发两种工作模式。
|
6月前
|
网络协议 算法 Java
Netty基础—3.基础网络协议
本文详细梳理了计算机网络的基础知识,涵盖从物理层到应用层的各层协议及其功能。内容包括七层模型与四层模型对比、IP地址与子网划分、TCP三次握手及四次挥手过程、Socket编程原理、HTTP/HTTPS协议的工作机制等。同时深入探讨了Linux IO模型(阻塞、非阻塞、IO多路复用)及其应用场景,并分析了select、poll、epoll的区别。此外,还涉及Java IO读写的底层流程及同步异步、阻塞非阻塞的概念。这些知识点为理解网络通信和高性能服务器开发提供了全面的理论支持。
|
8月前
|
安全 网络协议 网络安全
当虚拟机出现网络连接问题时,应该先检查Hyper-V的网卡连接配置
当虚拟机出现网络连接问题时,应首先检查Hyper-V的网卡配置。具体步骤包括:确认虚拟机运行状态、检查虚拟交换机类型和物理网卡连接、确保虚拟机网络适配器正确连接到虚拟交换机,并验证网络配置(IP地址等)。常见问题如虚拟交换机配置错误、网络适配器未连接或防火墙阻止连接,可通过重新配置或调整设置解决。必要时重启虚拟机和宿主机,查看事件日志或联系技术支持以进一步排查问题。