Just check our hex dump example… This does exactly what you want to do: https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/proxy <https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/proxy>
> On 06 Sep 2016, at 18:59, L_DisplayName <[email protected]> wrote: > > Greetings All, > I wanted to know how I can use ChannelDuplexHandler from a server to > connect to another server? Also I would like to know if my understanding of > channelDuplex handler is correct and what's the difference between > bootstrapping a client and having it connect to a server verses having the > ChannelDuplexHandler connect to the server? > > For example: If I have a client A, a Server B and a Server C. and I want > client A to connect to Server B and Server B connect to Server C. where > pictorially I have: > A-->B-->C > > Below I show Server's B Handler code, as soon as client A connects to Server > B (The code for this is below B's Server Handler code), I want Server B to > connect to Server C, can you tell me if the code below is correct or if any > thing needs to be changed and if so what and how? Thank you! > > Attempting to connect Server B to Server C using ChannelDuplexHandler (Note I > am showing Server B's handler class) > public class Server_B_Handler extends ChannelDuplexHandler { > > private String ipAddressToConnectTo, localIpAddress; > private int portToConnectTo, localPort; > private Logger logger; > private ChannelHandlerContext ctx; > private Channel channelFrom_A_to_B; > private Channel channelFrom_B_to_C; > > public Server_B_Handler(String ipAddress, int port, localIpAddress, > localPort) { > ipAddressToConnectTo = ipAddress; > portToConnectTo = port > this.localIpAddress = localIpAddress; > this.localPort = localPort; > logger = Logger.getLogger(this.getClass().getName()); > this.ctx = null; > channelFrom_A_to_B = null; //Inbound channel > channelFrom_B_to_C = null; //Outbound Channel > > } > > @Override > public void channelActive(ChannelHandlerContext ctx) throws Exception{ > //THIS CTX (Channel context) is for the channel connecting Client A to this > Server (Server B) > //Please see below for code connecting client A to Server B > this.ctx = ctx; > channelFrom_A_to_B = this.ctx().channel(); > > //QUESTION HOW CAN I CONNECT TO SERVER C using this server's CONNECT METHOD? > > final Promise<Channel> myPromise = this.ctx.executor().newPromise(); > ctx.connect(new > InetSocketAddress(InetAddress.getByName(ipAddressToConnectTo), > portToConnectTo),new > InetSocketAddress(this.localIpAddress,this.localPort),myPromise); > myPromise.addListener(new FutureListener<Channel>(){ > @override > public void operationComplete(final Future<Channel> future) throws Exception > { > if (future.isSuccess()){ > //Connection attempt successful > channelFrom_B_to_C = future.get(); > logger.info("Server B successfully connected to Server C") > } > else { > //Connection attempt was not successful > channelFrom_B_to_C = future.get().close(); > logger.info("Server B did not successfully connect to Server C. closing...") > } > }); > > } > > > @Override > public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws > Exception { > //What ever the inbound channel (channelFrom_A_to_B) reads write it to the > outbound channel > if ( channelFrom_B_to_C.isActive()){ > channelFrom_B_to_C.write(msg); > } > } > > @Override > public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { > cause.printStackTrace(); > > if (ctx.channel().isActive()) { > ctx.writeAndFlush("ERR: " + > cause.getClass().getSimpleName() + ": " + > cause.getMessage() + '\n').addListener(ChannelFutureListener.CLOSE); > } > } > } > > > I know I can connect Client A to Client B by the following code > public final class Client_A { > > static final boolean SSL = System.getProperty("ssl") != null; > static final int SIZE = Integer.parseInt(System.getProperty("size", "256")); > static final String HOST = System.getProperty("host", "129.456.7.9"); > static final int PORT = Integer.parseInt(System.getProperty("port","4959")); > > public static void main(String[] args) throws Exception { > final SslContext sslCtx; > if (SSL) { > sslCtx = SslContextBuilder.forClient() > .trustManager(InsecureTrustManagerFactory.INSTANCE).build(); > } else { > sslCtx = null; > } > > // Configure the client. > EventLoopGroup group = new NioEventLoopGroup(); > try { > Bootstrap b = new Bootstrap(); > b.group(group) > .channel(NioSocketChannel.class) > .option(ChannelOption.TCP_NODELAY, true) > .handler(new ChannelInitializer<SocketChannel>() { > @Override > public void initChannel(SocketChannel ch) throws Exception { > ChannelPipeline p = ch.pipeline(); > if (sslCtx != null) { > p.addLast(sslCtx.newHandler(ch.alloc(), HOST, PORT)); > } > //p.addLast(new LoggingHandler(LogLevel.INFO)); > p.addLast( > new LengthFieldBasedFrameDecoder(1024*1024*128, 0, 8, 0, 8), > new Client_A_Handler()); > } > }); > > // Start the client. > ChannelFuture f = b.connect(HOST, PORT).sync(); > > // Wait until the connection is closed. > f.channel().closeFuture().sync(); > } finally { > // Shut down the event loop to terminate all threads. > group.shutdownGracefully(); > } > } > } > > > > > -- > You received this message because you are subscribed to the Google Groups > "Netty discussions" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] > <mailto:[email protected]>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/netty/cc201da0-7cac-4534-a666-6ac8efa9d677%40googlegroups.com > > <https://groups.google.com/d/msgid/netty/cc201da0-7cac-4534-a666-6ac8efa9d677%40googlegroups.com?utm_medium=email&utm_source=footer>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- You received this message because you are subscribed to the Google Groups "Netty discussions" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/netty/2CBB8B31-7E99-47B9-88DE-D1FB4E95BF59%40googlemail.com. For more options, visit https://groups.google.com/d/optout.
