Java Netty服務(wù)器:客戶端端口變化的原因分析
在使用Netty框架構(gòu)建Java服務(wù)器時(shí),獲取客戶端IP和端口號(hào)是常見需求。本文解釋一個(gè)常見現(xiàn)象:客戶端IP地址保持不變,但端口號(hào)每次連接都變化的原因。
問題:Netty服務(wù)器的handlerAdded方法記錄客戶端IP、端口和channel。開發(fā)者發(fā)現(xiàn),客戶端IP地址一致,但端口號(hào)每次連接都不同,且cmd命令未顯示端口被占用。
原因:這屬于操作系統(tǒng)正常行為。客戶端IP地址是網(wǎng)絡(luò)唯一標(biāo)識(shí),在單次會(huì)話中通常不變。然而,客戶端端口號(hào)由操作系統(tǒng)動(dòng)態(tài)分配,每次新連接都可能分配不同端口。 即使客戶端IP相同,系統(tǒng)也會(huì)根據(jù)可用端口情況隨機(jī)選擇一個(gè)未被占用的端口。
因此,服務(wù)器觀察到的IP地址不變、端口號(hào)每次變化,并非程序錯(cuò)誤,而是操作系統(tǒng)動(dòng)態(tài)端口分配的正常結(jié)果。 如果使用netstat等工具在連接期間查看,就能看到客戶端使用的端口和進(jìn)程信息。開發(fā)者在連接斷開后檢查,自然找不到端口占用信息。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END