Netty服务器:客户端IP不变,端口却变化的原因是什么?
技术百科
DDD
发布时间:2025-03-16
浏览: 次 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地址不变,端口号每次连接都变化是操作系统正常行为,并非程序错误。
# 操作系统
# 至关重要
# 一个问题
# 未被
# 提示信息
# 客户端
# 命令行
# 工具
# Java
# map
# 端口号
# 这并
# 它由
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- MAC如何启用访达侧边栏显示_MAC Finder
- 如何使用Golang模拟请求超时_Golang c
- C++如何使用std::transform批量处理
- Win11怎么禁用键盘自带键盘_Win11笔记本禁
- 如何使用正则表达式提取以编号开头、后跟多个注解的完
- Win11怎么查看wifi信号强度_检测Windo
- php报错怎么查看_定位PHP致命错误与警告的方法
- Win10电脑怎么设置网络名称_Windows10
- windows如何禁用驱动程序强制签名_windo
- Win11怎么更改默认打开方式_Win11关联文件
- Windows服务无法启动错误1067是什么_进程
- Go 中 defer 语句在 goroutine
- Win11任务栏怎么放到顶部_Win11修改任务栏
- Win11怎么关闭用户账户控制UAC_Window
- C#如何序列化对象为XML XmlSerializ
- Drupal 中 HTML 链接被重复转义导致渲染
- php转mp4怎么设置帧率_调整php生成mp4视
- Win11如何连接Xbox手柄 Win11蓝牙连接
- Windows Defender扫描失败怎么办_安
- 如何在 Python 测试中动态配置 @backo
- Win11怎么开启游戏工具栏_Windows11
- Win11鼠标灵敏度怎么调 Win11鼠标指针移动
- php怎么下载安装后无法解析php文件_服务器配置
- Win11怎么更改文件夹图标_自定义Win11文件
- php后缀怎么变mp4能播放_让php伪装mp4正
- 如何在Golang中使用container/hea
- Mac如何使用听写功能_Mac语音输入打字【效率技
- PythonPandas数据分析教程_数据清洗与处
- 如何在JavaScript中动态拼接PHP的bas
- 如何使用Golang benchmark测量函数延
- Win11怎么激活Windows10_Win11激
- Win11怎么设置指纹解锁 Win11笔记本录入指
- php能控制zigbee模块吗_php通过串口与c
- Win10文件历史记录怎么用 Win10开启自动备
- Win11怎么开启窗口对齐助手_Windows11
- C++ STL算法库怎么用?C++常用算法函数(s
- Win11怎么关闭系统推荐内容_Windows11
- 如何使用Golang指针与结构体结合_修改结构体内
- MAC如何快速搜索大文件_MAC磁盘空间分析与冗余
- 如何用列表一次性对 DataFrame 的指定列应
- Windows10如何更改鼠标图标_Win10鼠标
- Python随机数生成_random模块说明【指导
- C#如何使用Channel C#通道实现异步通信
- c++怎么使用std::tuple存储多元组数据_
- Win11系统占用空间大怎么办 Win11深度瘦身
- 如何使用Golang安装API文档生成工具_快速生
- Win10系统映像怎么恢复 Win10使用系统映像
- php增删改查需要哪些扩展_开启mysqli或pd
- 如何正确访问 Laravel 模型或对象的属性而非
- 本地php环境出现502错误_nginx或apac

QQ客服