public class ClientBootstrap extends Bootstrap
Channel
and makes a
connection attempt.
Options
are used to configure a channel:
For the detailed list of available options, please refer toClientBootstrap
b = ...; // Options for a new channel b.setOption("remoteAddress", newInetSocketAddress
("example.com", 8080)); b.setOption("tcpNoDelay", true); b.setOption("receiveBufferSize", 1048576);
ChannelConfig
and its sub-types.
ChannelPipeline
and you can configure it
in two ways.
The recommended approach is to specify a ChannelPipelineFactory
by
calling Bootstrap.setPipelineFactory(ChannelPipelineFactory)
.
ClientBootstrap
b = ...; b.setPipelineFactory(new MyPipelineFactory()); public class MyPipelineFactory implementsChannelPipelineFactory
{ publicChannelPipeline
getPipeline() throws Exception { // Create and configure a new pipeline for a new channel.ChannelPipeline
p =Channels
.pipeline(); p.addLast("encoder", new EncodingHandler()); p.addLast("decoder", new DecodingHandler()); p.addLast("logic", new LogicHandler()); return p; } }
The alternative approach, which works only in a certain situation, is to use the default pipeline and let the bootstrap to shallow-copy the default pipeline for each new channel:
Please note 'shallow-copy' here means that the addedClientBootstrap
b = ...;ChannelPipeline
p = b.getPipeline(); // Add handlers to the default pipeline. p.addLast("encoder", new EncodingHandler()); p.addLast("decoder", new DecodingHandler()); p.addLast("logic", new LogicHandler());
ChannelHandler
s
are not cloned but only their references are added to the new pipeline.
Therefore, you cannot use this approach if you are going to open more than
one Channel
s or run a server that accepts incoming connections to
create its child channels.
Channel
sClientBootstrap
is just a helper class. It neither allocates nor
manages any resources. What manages the resources is the
ChannelFactory
implementation you specified in the constructor of
ClientBootstrap
. Therefore, it is OK to create as many
ClientBootstrap
instances as you want with the same
ChannelFactory
to apply different settings for different
Channel
s.Constructor and Description |
---|
ClientBootstrap()
Creates a new instance with no
ChannelFactory set. |
ClientBootstrap(ChannelFactory channelFactory)
Creates a new instance with the specified initial
ChannelFactory . |
Modifier and Type | Method and Description |
---|---|
ChannelFuture |
bind(SocketAddress localAddress)
Attempts to bind a channel with the specified
localAddress . later the channel can
be connected to a remoteAddress by calling Channel.connect(SocketAddress) .This method
is useful where bind and connect need to be done in separate steps. |
ChannelFuture |
connect()
Attempts a new connection with the current
"remoteAddress" and
"localAddress" option. |
ChannelFuture |
connect(SocketAddress remoteAddress)
Attempts a new connection with the specified
remoteAddress and
the current "localAddress" option. |
ChannelFuture |
connect(SocketAddress remoteAddress,
SocketAddress localAddress)
Attempts a new connection with the specified
remoteAddress and
the specified localAddress . |
getFactory, getOption, getOptions, getPipeline, getPipelineAsMap, getPipelineFactory, releaseExternalResources, setFactory, setOption, setOptions, setPipeline, setPipelineAsMap, setPipelineFactory
public ClientBootstrap()
ChannelFactory
set.
Bootstrap.setFactory(ChannelFactory)
must be called before any I/O
operation is requested.public ClientBootstrap(ChannelFactory channelFactory)
ChannelFactory
.public ChannelFuture connect()
"remoteAddress"
and
"localAddress"
option. If the "localAddress"
option is
not set, the local address of a new channel is determined automatically.
This method is similar to the following code:
ClientBootstrap
b = ...;
b.connect(b.getOption("remoteAddress"), b.getOption("localAddress"));
IllegalStateException
- if "remoteAddress"
option was not setClassCastException
- if "remoteAddress"
or "localAddress"
option's
value is neither a SocketAddress
nor null
ChannelPipelineException
- if this bootstrap's pipelineFactory
failed to create a new ChannelPipeline
public ChannelFuture connect(SocketAddress remoteAddress)
remoteAddress
and
the current "localAddress"
option. If the "localAddress"
option is not set, the local address of a new channel is determined
automatically. This method is identical with the following code:
ClientBootstrap
b = ...;
b.connect(remoteAddress, b.getOption("localAddress"));
ClassCastException
- if "localAddress"
option's value is
neither a SocketAddress
nor null
ChannelPipelineException
- if this bootstrap's pipelineFactory
failed to create a new ChannelPipeline
public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress)
remoteAddress
and
the specified localAddress
. If the specified local address is
null
, the local address of a new channel is determined
automatically.ChannelPipelineException
- if this bootstrap's pipelineFactory
failed to create a new ChannelPipeline
public ChannelFuture bind(SocketAddress localAddress)
localAddress
. later the channel can
be connected to a remoteAddress by calling Channel.connect(SocketAddress)
.This method
is useful where bind and connect need to be done in separate steps.
This can also be useful if you want to set an attachment to the Channel
via
Channel.setAttachment(Object)
so you can use it after the bind(SocketAddress)
was done.
ChannelFuture bindFuture = bootstrap.bind(new InetSocketAddress("192.168.0.15", 0)); Channel channel = bindFuture.getChannel(); channel.setAttachment(dataObj); channel.connect(new InetSocketAddress("192.168.0.30", 8080));
public class YourHandler extends SimpleChannelUpstreamHandler { public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { Object dataObject = ctx.getChannel().getAttachment(); } }
ChannelPipelineException
- if this bootstrap's pipelineFactory
failed to create a new ChannelPipeline
Copyright © 2008-2013 The Netty Project. All Rights Reserved.