2013-03-25 207 views
0

我在netty中创建客户端连接时遇到问题。Netty客户端连接

Configuring a channel 
Options are used to configure a channel: 

ClientBootstrap b = ...; 

// Options for a new channel 
b.setOption("remoteAddress", new InetSocketAddress("example.com", 8080)); 
b.setOption("tcpNoDelay", true); 
b.setOption("receiveBufferSize", 1048576); 

这里,为什么我们没有绑定方法将通道绑定到客户端连接启动的端口(在客户端)? 我们需要提供的唯一的事情就是给服务器地址和端口如下:

channel = bootstrap.connect(new InetSocketAddress(host, port)); 

这并创造在客户端或服务器端的新渠道?此通道绑定在客户端的端口是什么?

我们做这样一个服务器端的自举时,如下

ServerBootstrap b = ...; 
channel = b.bind(b.getOption("localAddress")); 

我很困惑,不能够理解从哪个端口客户端发送数据到服务器,并使用何种通道绑定?

回答

5

您应该使用ClientBootstrap.connect(remoteAddress, localAddress)来指定要创建的套接字的本地地址。或者,您可以拨打ClientBootstrap.bind(localAddress).sync(),然后致电ClientBootstrap.connect(remoteAddress)实现相同的目的。

0

当您使用connect(SocketAddress remoteAddress))创建客户端连接时,您将在客户端创建一个通道。 connect方法绑定本地地址,然后连接到远程地址。当在connect方法中没有指定本地地址时,该方法将绑定本地ip和一个随机端口。 如果您想决定使用哪个本地端口,则需要使用connect(SocketAddress remoteAddress, SocketAddress localAddress)方法。