Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.sheldon.javaPrj.netty; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.stream.ChunkedWriteHandler; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author xiangnan.wang@ipinyou.com */ public class FileServer { private int port; public FileServer(int port) { this.port = port; } public void start() { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 128).childOption(ChannelOption.SO_KEEPALIVE, true) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new FileServerHandler()); } }); ChannelFuture f = b.bind(port).sync(); System.out.println("server start"); f.channel().closeFuture().sync(); System.out.println("server down"); } catch (InterruptedException ex) { Logger.getLogger(FileServer.class.getName()).log(Level.SEVERE, null, ex); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } public static void main(String args[]) { FileServer server = new FileServer(8888); server.start(); } }