Netty服务器:客户端IP不变,端口却变化的原因是什么?(端口.客户端.变化.原因.服务器...)
Java Netty服务器:客户端IP地址不变,端口号却变化的原因分析
在使用Netty构建Java服务器时,获取客户端IP地址和端口号至关重要。然而,开发者经常遇到一个问题:客户端IP地址保持不变,但端口号每次连接都不同。本文将对此进行深入分析。
问题描述:
Netty服务器端获取客户端IP和端口号,并将其存储在Map中。开发者发现,客户端IP地址一致,但端口号每次连接都变化,这令人困惑,因为命令行工具未显示任何进程占用这些端口。
以下代码片段展示了Netty服务器端如何获取客户端IP地址和端口号:
/** * 当有客户端与服务器连接时执行此方法 * 1.打印提示信息 * 2.将客户端IP和连接通道存储到remoteAddressChannleMap */ @Override public void handlerAdded(ChannelHandlerContext ctx) throws Exception { Channel channel = ctx.channel(); // 客户端建立连接时,保存其IP和通道 channel.remoteAddress().toString():/127.0.0.1:12173 InetSocketAddress remoteAddress = (InetSocketAddress) channel.remoteAddress(); System.err.println("有新的客户端与服务器发生连接。客户端地址:" + channel.remoteAddress()); remoteAddressChannelMap.put(remoteAddress.toString().substring(1), channel); System.out.println("remoteAddressChannleMap 的 size:" + remoteAddressChannleMap.size()); // channelGroup.add(channel); }
原因解释:
客户端IP地址不变是正常的,因为它由网络配置决定,除非网络配置改变。
端口号变化的原因是:客户端与服务器建立连接时,会动态选择一个可用端口。操作系统负责管理这些端口,为每个新连接分配一个未被占用的端口。这并非程序占用端口,而是操作系统在客户端层面分配的临时端口,用于本次连接。因此,命令行工具未显示进程占用这些端口是正常的。 如果连接仍然存在,使用netstat命令应该能看到这些临时端口被操作系统占用。连接断开后,这些端口会被释放。
因此,客户端IP地址不变,端口号每次连接都变化是操作系统正常行为,并非程序错误。
以上就是Netty服务器:客户端IP不变,端口却变化的原因是什么?的详细内容,更多请关注知识资源分享宝库其它相关文章!