日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Netty入门(一)环境搭建及使用

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Netty入门(一)环境搭建及使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、項目創建

  在 Eclipse 中右鍵,新建->項目->Maven->Maven Project->下一步->選擇 quickstart

  

  下一步->設置如圖(參數自取)

  

  點擊完成。

?  項目會自動創建 pom.xml 文件,打開該文件,點擊 Dependencies標簽->Add..,設置如圖(參數由 Netty 版本決定):

  

  點擊 OK,保存文件,觀察 Maven Dependencies 下,

  

  netty 的 jar 包已經添加完畢。到此為止,項目配置完畢了,下面就來添加代碼吧。

?

二、實現一個簡單的服務端 demo

1. 首選我們需要自定義一個類處理服務器接收到的消息

1 package com.coder.server;2 3 import io.netty.buffer.ByteBuf;4 import io.netty.channel.ChannelHandlerContext;5 import io.netty.channel.ChannelInboundHandlerAdapter;6 import io.netty.util.CharsetUtil;7 import io.netty.util.ReferenceCountUtil;8 9 /** 10 * 輸出接收到的消息 11 * @author Coder 12 * 13 */ 14 public class HelloServerHandler extends ChannelInboundHandlerAdapter { 15 /** 16 * 收到數據時調用 17 */ 18 @Override 19 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 20 try { 21 ByteBuf in = (ByteBuf)msg; 22 System.out.print(in.toString(CharsetUtil.UTF_8)); 23 } finally { 24 // 拋棄收到的數據 25 ReferenceCountUtil.release(msg); 26 } 27 28 // ctx.write(msg); 29 // ctx.flush(); 30 } 31 32 /** 33 * 當Netty由于IO錯誤或者處理器在處理事件時拋出異常時調用 34 */ 35 @Override 36 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 37 // 當出現異常就關閉連接 38 cause.printStackTrace(); 39 ctx.close(); 40 } 41 }

  該類主要是實現了接收客戶端發來的消息,并輸出到控制臺。

?

2. 然后我們就能實現一個簡單的服務端程序了

  Netty 服務器的通信步驟為:

  • ?創建兩個NIO線程組,一個專門用于接收來自客戶端的連接,另一個則用于處理已經被接收的連接。
  • ?創建一個ServerBootstrap對象,配置Netty的一系列參數,例如接受傳出數據的緩存大小等。
  • ?創建一個用于實際處理數據的類ChannelInitializer,進行初始化的準備工作,比如設置接受傳出數據的字符集、格式以及實際處理數據的接口。
  • ?綁定端口,執行同步阻塞方法等待服務器端啟動即可。
  • 1 package com.coder.server;2 3 import io.netty.bootstrap.ServerBootstrap;4 import io.netty.channel.ChannelFuture;5 import io.netty.channel.ChannelInitializer;6 import io.netty.channel.ChannelOption;7 import io.netty.channel.EventLoopGroup;8 import io.netty.channel.nio.NioEventLoopGroup;9 import io.netty.channel.socket.SocketChannel; 10 import io.netty.channel.socket.nio.NioServerSocketChannel; 11 12 public class HelloServer { 13 private int port; 14 15 public HelloServer(int port) { 16 this.port = port; 17 } 18 19 public void run() throws Exception { 20 EventLoopGroup bossGroup = new NioEventLoopGroup(); // 用來接收進來的連接 21 EventLoopGroup workerGroup = new NioEventLoopGroup(); // 用來處理已經被接收的連接 22 System.out.println("準備運行端口:" + port); 23 24 try { 25 ServerBootstrap b = new ServerBootstrap(); 26 b.group(bossGroup, workerGroup) 27 .channel(NioServerSocketChannel.class) // 這里告訴Channel如何接收新的連接 28 .childHandler( new ChannelInitializer<SocketChannel>() { 29 @Override 30 protected void initChannel(SocketChannel ch) throws Exception { 31 // 自定義處理類 32 ch.pipeline().addLast(new HelloServerHandler()); 33 } 34 }) 35 .option(ChannelOption.SO_BACKLOG, 128) 36 .childOption(ChannelOption.SO_KEEPALIVE, true); 37 38 // 綁定端口,開始接收進來的連接 39 ChannelFuture f = b.bind(port).sync(); 40 41 // 等待服務器socket關閉 42 f.channel().closeFuture().sync(); 43 } catch (Exception e) { 44 workerGroup.shutdownGracefully(); 45 bossGroup.shutdownGracefully(); 46 } 47 } 48 49 public static void main(String[] args) throws Exception { 50 int port = 10110; 51 new HelloServer(port).run(); 52 } 53 54 }

    ?  那么,這便是一個可執行的服務端程序了。運行后控制臺輸出如下:

      

    ?

    三、測試?

    ?  我們可以去自定義客戶端程序,這里為了方便使用 telnet 充當客戶端。

      需要注意的是,Windows 默認是沒有開啟 telnet 客戶端的,需要我們手動開啟。

      菜單->控制面板->程序->打開或關閉Windows功能,設置如圖:

      

      這樣我們就能用 telnet 客戶端了。

      在 cmd 窗口輸入命令如下:

      

      打開窗口如下:

      

      這時候我們在該窗口輸入什么,eclipse 控制臺也會對應輸出相應內容。如下:

      

      注意:telnet 窗口會看不到輸入的字符,只要輸入 ctrl+L 就可以看到輸入的字符了。

    總結

    以上是生活随笔為你收集整理的Netty入门(一)环境搭建及使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。