Netty学习之旅(二)(HelloWorld)

这篇博客介绍了Netty入门程序,通过添加Netty依赖到pom.xml,创建服务端和客户端的Bootstrap,以及实现HelloWorldServerHandler和HelloWorldClientHandler。文章详细讲解了服务端的channelInboundHandlerAdapter方法,包括messageReceived、channelConnected和channelDisconnected。最后,博主分享了GitHub上的代码链接供读者参考。
摘要由CSDN通过智能技术生成

这是一个Netty入门程序

我们先在做一些实现准备工作,机会总是给有准备的人嘛!........扯远了

其实就是将pom.xml中加入netty的依赖

在pom.xml中添加:

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


首先我们来看看Netty服务端:

       我们在服务端里需要继承channelInboundHandlerAdapter(管道适配器),继承这个类后我们可以发现里面有很多有用的方法。一般常用的:

       messageReceived 接受消息

       channelConnected 新连接,通常用来检测IP是够黑名单

       channelDisconnected 连接关闭,可以在用户短线的时候清除用户的缓存数据库

 

下面我们开始写Netty的服务端,主要书写的任务:

       ServerBootstrap 指定它的接口、port、是否是NIO、最重要的是server端的处理器还需注意:在程序结尾需要关闭连接、释放线程资源。


下面我们书写代码,首先我们来写HelloWorldServerHandler,这个类是主要通信的主题方法。继承channelInboundHandlerAdapter。

代码如下:

HelloWorldServerHandler

package com.ysf.server;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

public class HelloWorldServerHandler extends ChannelInboundHandlerAdapter {


    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        System.out.println("server channelRead..");
        System.out.println(ctx.channel().remoteAddress()+"->Server :"+ msg.toString());
        ctx.write("server write"+m
好的,以下是使用Netty搭建TCP服务器的示例代码(Hello World): ```java import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; public class HelloWorldServer { private final int port; public HelloWorldServer(int port) { this.port = port; } public void run() throws Exception { // 创建两个 EventLoopGroup,一个用于接收客户端连接,一个用于处理客户端请求 EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { // 创建 ServerBootstrap 对象,用于配置服务器 ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { // 添加消息处理器 ch.pipeline().addLast(new HelloWorldServerHandler()); } }); // 绑定端口,开始接收客户端请求 ChannelFuture f = b.bind(port).sync(); // 等待服务器 socket 关闭 f.channel().closeFuture().sync(); } finally { // 释放资源 workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } public static void main(String[] args) throws Exception { int port = 8080; new HelloWorldServer(port).run(); } } ``` 其中,`HelloWorldServerHandler` 是自定义的消息处理器,可以根据需要进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值