netty獲取玩家chanel_Netty4.X 獲取客戶端IP

最近使用netty-4.0.23.Final 版本編寫服務端代碼,有個獲取客戶端代碼的小需求,以前使用servlet開發時很機械的就:String?ipAddr="0.0.0.0";

if?(reqest.getHeader("X-Forwarded-For")?==?null)?{

ipAddr?=?reqest.getRemoteAddr();

}else{

ipAddr?=?req.getHeader("X-Forwarded-For");

}

ps:X-Forwarded-For 是使用了代理(如nginx)會附加在HTTP頭域上的。

理解好HTTP協議基礎知識很重要這里不陳述。

Netty提供異步的、事件驅動的網絡應用程序框架和工具,用以快速開發高性能、高可靠性的網絡服務器和客戶端程序,支持多種協議,當然也支持HTTP協議。

啟動Netty服務的程序:public?void?start()?throws?Exception?{

EventLoopGroup?bossGroup?=?new?NioEventLoopGroup(1);

EventLoopGroup?workerGroup?=?new?NioEventLoopGroup();

try?{

ServerBootstrap?bootstrap?=?new?ServerBootstrap();

bootstrap.option(ChannelOption.SO_BACKLOG,?1024);

bootstrap.group(bossGroup,?workerGroup)

.channel(NioServerSocketChannel.class)

.handler(new?LoggingHandler(LogLevel.INFO))

.childHandler(new?ServerHandlerInitializer());

Channel?ch?=?bootstrap.bind(8080).sync().channel();

System.err.println("Open?your?web?browser?and?navigate?to?"

+?("http")?+?"://127.0.0.1:8080/");

ch.closeFuture().sync();

}?catch?(Exception?e)?{

e.printStackTrace();

}?finally?{

bossGroup.shutdownGracefully();

workerGroup.shutdownGracefully();

}

}

public?class?ServerHandlerInitializer?extends?ChannelInitializer?{

@Override

protected?void?initChannel(SocketChannel?channel)?throws?Exception?{

ChannelPipeline?p?=?channel.pipeline();

p.addLast(new?HttpRequestDecoder());

p.addLast(new?HttpResponseEncoder());

p.addLast(new?ServerHandler());

}

}

看出NioServerSocketChannel類的源碼可以知道是對java.nio.channels.ServerSocketChannel重新封裝,所以在獲取客戶端IP時調用remoteAddress()強轉成java.net.InetSocketAddress即可獲取。public?class?ServerHandler?extends?SimpleChannelInboundHandler?{

@Override

public?void?channelRead0(ChannelHandlerContext?ctx,?HttpObject?msg)

throws?Exception?{

if?(msg?instanceof?HttpRequest)?{

HttpRequest?mReq?=?(HttpRequest)?msg;

String?clientIP?=?mReq.headers().get("X-Forwarded-For");

if?(clientIP?==?null)?{

InetSocketAddress?insocket?=?(InetSocketAddress)?ctx.channel()

.remoteAddress();

clientIP?=?insocket.getAddress().getHostAddress();

}

}

}

}

這樣我們就可以獲取到客戶端的IP了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534691.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534691.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534691.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html高度沒有滾動條,Div擴展了頁面高度,但沒有滾動條

我在頁面左側有一個div用于導航鏈接。點擊標題可展開鏈接的子集。我將此div設置為頁面高度的100%,以便列占據頁面的整個左側。當所有子類別都展開時,會出現問題。 div的內容在頁面底部運行,但不添加滾動條。Div擴展了頁面高度&…

es 刪除重復數據_怎么標識并刪除SPSS數據庫里的“重復個案”?

背景:測試學生體質數據時,由于部分學生第1次測試成績不合格,讓他們進行了補測。但是,錄入數據時,沒有替換,造成這部分學生有2個體測成績,現在需要找到這些重復個案并刪除較差的成績。1. 數據概覽…

計算機視覺sci需要什么水平論文,計算機視覺博士一般幾篇論文_林達華博士_林達華視覺...

2019年,計算機視覺領域,你推薦哪些綜述性的文章?...期待更多CVer在FGIA領域作出有影響力的工作,更多FGIA信息可參見也歡迎相關領域同學進入 曠視南京研究院 參與相關課題的研究...如何讀一篇優秀的計算機論文?轉載一個…

上海大學計算機考研試題,08-09上海大學計算機考研試卷.doc

08-09上海大學計算機考研試卷第 頁 共 頁 第 頁 共 頁第 頁 共 頁 第 頁 共 頁上海大學2008~2009學年 秋季學期研究生答題卷課程名稱:計算機視覺基礎 課程編號: 0座機電話號碼 學 分: 4 考試日期: 2008年11月23日應試人…

python logging模塊的作用及應用場景_Python常用模塊功能簡介(三)logging

logging基本介紹先介紹一下我們為什么要使用日志,平常我們編寫程序為了驗證程序運行與debug,通常會使用print函數來對一些中間結果進行輸出驗證,在驗證成功后再將print語句注釋或刪除掉。這樣做在小型程序中還比較靈活,但是對于大…

計算機科技文獻中 CAM,計算機輔助設計、制造(CAD、CAM)和《機械制圖》 課程的結合、探索與實踐研究...

王建臣摘要:隨著我國科學技術的迅猛發展,計算機技術也隨之得到大范圍推廣,并迎來跨越式的發展,在機械行業中,管理、設計、制造都已經逐漸換裝計算機來進行。計算機機械制圖作為機械專業的基礎課程,肩負著培…

docker linux 快速開窗口_Linux搭建docker環境并簡單實用

記錄生活:配置阿里云鏡像源docker YUM[rootcentos-linux ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2[rootcentos-linux ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安裝…

清華計算機接口原理,微機原理與接口技術課后習題答案清華大學

微機原理與接口技術課后習題答案清華大學 微機原理與接口技術課后部分習題參考答案 第一章 2. 第 3項任務,根據狀態標志位的狀態決定轉移方向。 3. 程序存儲是將要執行的程序的全部指令存儲到存儲器中,程序控制指程序開始執行后,通過指令流控…

vf求計算機系統當前日期的年份數,計算機二級VF常用函數列表

數值函數:1.絕對值和符號函數格式:ABS()SIGN()例如:ABS(-5)5,ABS(4)4,SIGN(8)1,SIGN(-3)-1,SIGN(0)02.求平方根表達式格式:SQRT()例如:SQRT(16)4,它與開二分之一次方等同。3.圓周率函數格式:PI()4.求整數函…

element走馬燈自動_詳細element-ui的走馬燈carousel輕松實現自適應全屏banner詳細過程...

div部分CSS部分.bannerImg{width: 100%;height: inherit;min-height: 600px;min-width: 1400px;}vue.JS部分var vm new Vue({el : #apptwo,data : {bannerHeight:"",BannerImg:["${request.contextPath}/statics/BCHimg/b6.png","${request.contextP…

4n35光耦引腳圖_光耦繼電器的主要特點以及輸入特性!先進光半導體

光耦合器是一種電光電轉換設備,可將電信號作為介質傳輸。它由兩部分組成:光源和光接收器。發光源和光接收器被組裝在同一氣密殼體中,并通過透明絕緣體彼此隔開。發光源的引腳為輸入端子,光接收器的引腳為輸出端子,公共…

系統流暢度測試軟件,如何通過FPS顯示快速測試自己手機流暢度

對于手機流暢度測試除了系統自帶的功能能測試手機流暢度之外,那么就沒有其它方法能測試手機流暢度了么?那么接下來由小編為大家推薦一款小工具FPS顯示(FPS Meter),你可以通過它快速的測試自己手機流暢度,接下來一起看看吧&#xf…

中軟國際軟件測試培訓中心,中軟國際準員工培養計劃C++開發/軟件測試方向開班典禮...

2010年8月31日上午9點半,中軟國際準員工培養計劃—C開發/軟件測試方向開班典禮在無錫ETC隆重舉行。開班典禮在熱烈的掌聲中拉開了序幕。典禮由教務部經理陳晨老師主持,首先她對近20名學員的到來表示歡迎,并對本次學習班順利開班表示祝賀。中軟…

django filter查詢多選_動態filter查詢數據Django實現方法

這是我在學習Django時看到的關于動態filter查詢數據Django實現方法。當時很受用,解決了我在工作中遇到的一個問題。可能有朋友會需要,轉來玩蛇網python學習平臺和大家一同分享下。在平時用Djangoa工作時,需要處理像是對多個字段進行查詢找結果…

二本考北航計算機經歷,我(來自二本學校)考上北航的一些經歷

大家很想知道二本考上是怎麼考上北航的吧!我就把我的一點經歷告訴大家吧。本人由于高考發揮的不好來到了一所很不入流的二本學校。所以我決定利用考研的機會進入理想大學。跟大家一樣我也是從大三下學期開始準備考研的,由于本人英語還可以,所…

pytorch 命令行運行_PyTorch簡介與相關安裝

PyTorch簡介PyTorch的前身是Torch,Torch是一個有大量機器學習算法支持的科學計算框架,靈活度很高,是一個與NumPy類似的張量(Tensor)操作庫。但是Torch采用的是小眾的編程語言Lua,因此流行度很低,于是就有了PyTorch的出…

軟件測試用例分享ppt,分享:測試用例設計方法.ppt

分享:測試用例設計方法.ppt還剩122頁未讀,繼續閱讀下載文檔到電腦,馬上遠離加班熬夜!親,很抱歉,此頁已超出免費預覽范圍啦!如果喜歡就下載吧,價低環保!內容要點&#xff…

python 命名空間沖突_python-命名空間

通俗的來說,Python中所謂的命名空間可以理解為一個容器。在這個容器中可以裝許多標識符。不同容器中的同名的標識符是不會相互沖突的。理解python的命名空間需要掌握三條規則:第一,賦值(包括顯式賦值和隱式賦值)產生標識符,賦值的…

修改tomcat服務器圖標,修改tomcat小貓圖標,設置項目的favicon圖標

JAVA設計模式之模板模式在閻宏博士的一書中開頭是這樣描述模板方法(Template Method)模式的: 模板方法模式是類的行為模式.準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式 ...從scheduler is shutted down看程序員的英文水平我有個windows服務程序,今天重點在測試…

golang 安全的tcp server_Go 語言使用 TCP_NODELAY 控制發包流量

編寫健壯且高性能的網絡服務需要付出大量的努力。提高服務性能的方式有很多種,比如優化應用層的代碼,更進一步,還可以看看垃圾回收器,操作系統,網絡傳輸,以及部署我們服務的硬件是否有優化空間。TCP/IP 協議…