0

在 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));

这会在客户端或服务器端创建一个新通道吗?这个通道在客户端绑定了什么端口?

我们在执行服务器端 BootStrap 时进行绑定,如下所示

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

我很困惑,无法理解客户端从哪个端口将数据发送到服务器以及使用了什么通道?

4

2 回答 2

5

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

于 2013-04-10T07:57:48.463 回答
0

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

于 2013-04-24T16:23:51.943 回答