
Java Netty服务器:客户端IP地址不变,端口号却变化的原因分析
在使用Netty构建Java服务器时,获取客户端IP地址和端口号至关重要。然而,开发者经常遇到一个问题:客户端IP地址保持不变,但端口号每次连接都不同。本文将对此进行深入分析。
问题描述:
Netty服务器端获取客户端IP和端口号,并将其存储在Map中。开发者发现,客户端IP地址一致,但端口号每次连接都变化,这令人困惑,因为命令行工具未显示任何进程占用这些端口。
以下代码片段展示了Netty服务器端如何获取客户端IP地址和端口号:
知我AI·PC客户端
离线运行 AI 大模型,构建你的私有个人知识库,对话式提取文件知识,保证个人文件数据安全
0 查看详情
/** * 当有客户端与服务器连接时执行此方法 * 1.打印提示信息 * 2.将客户端IP和连接通道存储到remoteAddressChannleMap */@Overridepublic 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不变,端口却变化的原因是什么?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/353320.html
微信扫一扫
支付宝扫一扫