packagetest;importjava.security.cert.CertificateException;importjavax.net.ssl.SSLException;importio.netty.bootstrap.ServerBootstrap;importio.netty.channel.ChannelFuture;importio.netty.channel.ChannelOption;importio.netty.channel.EventLoopGroup;importio.netty.channel.nio.NioEventLoopGroup;importio.netty.channel.socket.nio.NioServerSocketChannel;importio.netty.handler.ssl.SslContext;importio.netty.handler.ssl.SslContextBuilder;importio.netty.handler.ssl.util.SelfSignedCertificate;public classProxyServer {public static void main(String[] args) throwsInterruptedException, CertificateException, SSLException {boolean SSL = false;//System.getProperty("ssl") != null;
int PORT = Integer.parseInt(System.getProperty("port", SSL? "5688" : "8080"));finalSslContext sslCtx;if(SSL) {
SelfSignedCertificate ssc= newSelfSignedCertificate();
sslCtx=SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build();
}else{
sslCtx= null;
}
EventLoopGroup bossGroup= newNioEventLoopGroup();
EventLoopGroup workGroup= newNioEventLoopGroup();try{
ServerBootstrap b= newServerBootstrap();
b.group(bossGroup, workGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE,true).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 6000)
.childHandler(newProxyServiceInit(sslCtx));
ChannelFuture f=b.bind(PORT).sync();
System.out.println("端口号:"+PORT);
f.channel().closeFuture().sync();
}finally{
workGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
}