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了。
netty获取玩家chanel_Netty4.X 获取客户端IP相关推荐
- python 通过ip获取城市_python中通过客户端IP拿到所在城市和当地天气信息—附带项目案例...
首先,需求分析: 1.拿到客户端IP 2.通过IP拿到客户端所在地区 3.通过地区拿到当地天气 4.整合功能,展示给用户 第一步,如何拿到用户IP 我们以Django环境为例 # 客户端的请求,IP信 ...
- Java获取客户端IP(解决苹果和安卓版的微信客户端IP问题)
在做微信一键上网的功能,原本是用php来做,天知道原来苹果和安卓版的微信浏览器获取到的IP地址还是不一样的,苹果版的IP地址是真实的,安卓版的地址居然是代理地址(为何小龙要这处理?谁知道?),天知道用 ...
- Netty获取客户端IP
Netty4.X 获取客户端IP 原创 laukinghaozi 2014-09-20 17:21:57 评论(0) 8514人阅读 最近使用netty-4.0.23.Final 版本编写服务端代码, ...
- c# 获取客户端IP地址方法
客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVaria ...
- JS获取客户端IP地址、MAC和主机名的7个方法汇总
今天在搞JS(javascript)获取客户端IP的小程序,上网搜了下,好多在现在的系统和浏览器中的都无效,很无奈,在Chrome.FireFox中很少搞到直接利用ActiveX获取IP等的JS脚本. ...
- 如何在PHP中获取客户端IP地址[重复]
本文翻译自:How to get the client IP address in PHP [duplicate] This question already has an answer here: ...
- ASP.NET Core 中使用负载均衡时获取客户端 IP
在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的 ...
- c#中获取服务器IP,客户端IP以及其它
客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVariab ...
- ASP.NET获取客户端IP及MAC地址
ASP.NET获取客户端IP及MAC地址 2008-12-01 14:50 ASP.NET获取客户端IP及MAC地址很多时候非常必要的,像做投票.留言.评论 等系统的时候防止别人恶意操作,导致数据的虚 ...
最新文章
- 洛谷P2397 yyy loves Maths VI (mode) 摩尔投票
- jchdl - RTL实例 - And
- oracle 12c安装psu,Oracle 12C数据库PSU补丁安装方式的变化---新增datapatch
- jdk1.8新特性的应用-Stream 的终止操作
- react组件之间传递信息/react组件之间值的传递
- 二叉树查找结点及父结点_【剑指offer】57 二叉树的下一个结点
- 笔试 | 平安银行笔试题
- 请简述GC(垃圾回收)产生的原因,并描述如何避免?
- Response.AddHeader 参数
- 【渝粤教育】广东开放大学 动画运动规律 形成性考核 (25)
- 传统家装有落差,VR全景家装让你体验新房落成效果
- idea开发常用基本且非常实用的配置
- cocos2d lua 环境搭建
- 多线程并发篇(1024节日快乐)
- thinkphp 5.1 swoole扩展websocket使用教程
- OpenGLES 3.0
- 基于树莓派的语音识别和语音合成
- 房贷中的等额本息和等额本金有什么区别?
- 跑步与不跑步的人,区别,在十年之后 跑者心语
- oss 浏览器访问pdf文件不能预览
热门文章
- JUC 中断线程的3种方式
- jsp文字上下居中显示_微信朋友圈又有骚技巧,一键设置居中签名,好友傻眼了...
- cmd下pip安装mysql_Windows下使用pip安装mysql-python
- l2-008 最长对称子串 (25分)_小学数学关于时间认识(时、分、秒)的几点总结
- jeecg boot一对多新增的附表不会主键是一个string_测试开发专题:spring-boot如何使用JPA进行双向一对多配置...
- 2021浙江高考宁波四中成绩查询,2021浙江高考成绩查询时间公布 几号能查分
- c语言 若未给全局变量赋初值,自我测试练习参考-答案.doc
- c语言传递多个参数给线程,关于ssl多线程参数的传递
- 移动场景在其缩略图中显示场景中所显示的区域
- [LCP28] 采购方案