在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"));
我很困惑,无法理解客户端将数据发送到服务器的端口以及使用的通道是什么?
答案 0 :(得分:5)
您应该使用ClientBootstrap.connect(remoteAddress, localAddress)
指定要创建的套接字的本地地址。或者,您可以致电ClientBootstrap.bind(localAddress).sync()
,然后致电ClientBootstrap.connect(remoteAddress)
以实现同样的目标。
答案 1 :(得分:0)
使用connect(SocketAddress remoteAddress))
创建客户端连接时,您将在客户端创建一个频道。
connect方法绑定本地地址,然后连接到远程地址。当在connect方法中没有指定本地地址时,该方法将绑定在本地ip和随机端口上。
如果您想决定使用哪个本地端口,则需要使用connect(SocketAddress remoteAddress, SocketAddress localAddress)
方法。