关于客户端端口的疑问

来源:12-3 单机百万连接调优过程

慧眼识天下

2018-07-27

http://img.mukewang.com/szimg/5b5b31920001ebc212680943.jpg

在客户端调用bootstrap.connect(SERVER_HOST, port)连接服务器的时候,每次客户端的端口号是随机选取的吗?它是在指定的范围内选取的吗?而且它是选取当前系统中没有使用过的端口号吗?按照(服务器ip,服务器端口号,客户端ip,客户端端口号)确定一连接,上述代码是有可能有重复连接的,尽管概率很小,是吗?谢谢指教!

写回答

1回答

闪电侠

2018-07-29

  1. 如果没有指定端口号的话,是系统随机从未使用的端口中选择一个端口的,对于同一个服务端的ip,如果端口号已使用完,就会报错,不会有端口重复的

  2. 当然也可以自己指定端口号,下面是自己指定端口号的例子


public class NettyClient {
    public static void main(String[] args) {
        Bootstrap bootstrap = new Bootstrap();


        bootstrap.group(new NioEventLoopGroup())
                .channel(NioSocketChannel.class)
                .handler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel ch) {

                    }
                });

        SocketAddress remoteAddress = new InetSocketAddress("123.125.115.110", 80);
        SocketAddress localAddress = new InetSocketAddress(12345);
        bootstrap.connect(remoteAddress, localAddress).addListener(future -> {
            if (future.isSuccess()) {
                System.out.println("success");
            } else {
                System.err.println("error");
            }
        });

    }
}


0
1
慧眼识天下
非常感谢!
2018-07-30
共1条回复

Java读源码之Netty深入剖析

解析netty各大组件细节,百万级性能调优,设计模式实际运用

2334 学习 · 283 问题

查看课程