Netty 5に基づく.0導入事例1のNettyServer

2602 ワード

前言:
新しい知識には入門のケースが必要で、簡単な入出力で現在出会っているすべての疑問を解消することができます.先に理論を学んでから実戦を学ぶことを考えないでください.新東方はまだ135理論を学んで、246は実戦を学びます.
環境要件:
1、jdk1.7以上【jdk 1.7以下はnettyのみ一部サポート】
2、Netty-all-5.0【netty 3.x 4.x 5は毎回の変化が大きく、インタフェースクラス名も変化する】
3、telnetテスト【win 7マシンでこのコマンドをテストできます.サービス側のテストコマンドにリンクします】
======================
TestNettyServerBaseDemo
    src
        com.itstack
            ChildChannelHandler.java
            NettyServer.java
======================
ChildChannelHandler.java
package com.itstack;
 
import io.netty.channel.ChannelInitializer;
import io.netty.channel.socket.SocketChannel;
 
public class ChildChannelHandler extends ChannelInitializer{
 
	@Override
	protected void initChannel(SocketChannel e) throws Exception {
 
		System.out.println(" ");
		System.out.println(" : ");
		System.out.println("IP:"+e.localAddress().getHostName());
		System.out.println("Port:"+e.localAddress().getPort());
		System.out.println(" ");
	
	}
 
}

NettyServer
.java
package com.itstack;
 
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
 
public class NettyServer {
 
	public static void main(String[] args) {
		
		try {
			System.out.println(" ");
			new NettyServer().bing(7397);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	public void bing(int port) throws Exception{
		
		EventLoopGroup bossGroup = new NioEventLoopGroup();
		EventLoopGroup workGroup = new NioEventLoopGroup();
		
		try {
			
			ServerBootstrap b = new ServerBootstrap();
			b.group(bossGroup, workGroup);
			b.channel(NioServerSocketChannel.class);
			b.option(ChannelOption.SO_BACKLOG, 1024);
			b.childHandler(new ChildChannelHandler());
			
			//  
			ChannelFuture f = b.bind(port).sync();
			
			//  
			f.channel().closeFuture().sync();
			
		} finally {
			
			//  
			bossGroup.shutdownGracefully();
			workGroup.shutdownGracefully();
		}
		
	}
	
}

テスト実行:
1、NettyServerの起動
2、コンソール出力:
----------------------------------------------
サービス側オープン待機クライアントリンク
----------------------------------------------
3、DOSを開く
4、telnet localhost 7397を入力
5、コンソール出力:
----------------------------------------------
レポート情報:クライアントが本サービス端末IP:localhostにリンクする.localdomain Port:7397報告完了