最近使用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相关推荐

  1. python 通过ip获取城市_python中通过客户端IP拿到所在城市和当地天气信息—附带项目案例...

    首先,需求分析: 1.拿到客户端IP 2.通过IP拿到客户端所在地区 3.通过地区拿到当地天气 4.整合功能,展示给用户 第一步,如何拿到用户IP 我们以Django环境为例 # 客户端的请求,IP信 ...

  2. Java获取客户端IP(解决苹果和安卓版的微信客户端IP问题)

    在做微信一键上网的功能,原本是用php来做,天知道原来苹果和安卓版的微信浏览器获取到的IP地址还是不一样的,苹果版的IP地址是真实的,安卓版的地址居然是代理地址(为何小龙要这处理?谁知道?),天知道用 ...

  3. Netty获取客户端IP

    Netty4.X 获取客户端IP 原创 laukinghaozi 2014-09-20 17:21:57 评论(0) 8514人阅读 最近使用netty-4.0.23.Final 版本编写服务端代码, ...

  4. c# 获取客户端IP地址方法

    客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString();  客户端主机名: Request.ServerVaria ...

  5. JS获取客户端IP地址、MAC和主机名的7个方法汇总

    今天在搞JS(javascript)获取客户端IP的小程序,上网搜了下,好多在现在的系统和浏览器中的都无效,很无奈,在Chrome.FireFox中很少搞到直接利用ActiveX获取IP等的JS脚本. ...

  6. 如何在PHP中获取客户端IP地址[重复]

    本文翻译自:How to get the client IP address in PHP [duplicate] This question already has an answer here: ...

  7. ASP.NET Core 中使用负载均衡时获取客户端 IP

    在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的 ...

  8. c#中获取服务器IP,客户端IP以及其它

    客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVariab ...

  9. ASP.NET获取客户端IP及MAC地址

    ASP.NET获取客户端IP及MAC地址 2008-12-01 14:50 ASP.NET获取客户端IP及MAC地址很多时候非常必要的,像做投票.留言.评论 等系统的时候防止别人恶意操作,导致数据的虚 ...

最新文章

  1. 洛谷P2397 yyy loves Maths VI (mode) 摩尔投票
  2. jchdl - RTL实例 - And
  3. oracle 12c安装psu,Oracle 12C数据库PSU补丁安装方式的变化---新增datapatch
  4. jdk1.8新特性的应用-Stream 的终止操作
  5. react组件之间传递信息/react组件之间值的传递
  6. 二叉树查找结点及父结点_【剑指offer】57 二叉树的下一个结点
  7. 笔试 | 平安银行笔试题
  8. 请简述GC(垃圾回收)产生的原因,并描述如何避免?
  9. Response.AddHeader 参数
  10. 【渝粤教育】广东开放大学 动画运动规律 形成性考核 (25)
  11. 传统家装有落差,VR全景家装让你体验新房落成效果
  12. idea开发常用基本且非常实用的配置
  13. cocos2d lua 环境搭建
  14. 多线程并发篇(1024节日快乐)
  15. thinkphp 5.1 swoole扩展websocket使用教程
  16. OpenGLES 3.0
  17. 基于树莓派的语音识别和语音合成
  18. 房贷中的等额本息和等额本金有什么区别?
  19. 跑步与不跑步的人,区别,在十年之后 跑者心语
  20. oss 浏览器访问pdf文件不能预览

热门文章

  1. JUC 中断线程的3种方式
  2. jsp文字上下居中显示_微信朋友圈又有骚技巧,一键设置居中签名,好友傻眼了...
  3. cmd下pip安装mysql_Windows下使用pip安装mysql-python
  4. l2-008 最长对称子串 (25分)_小学数学关于时间认识(时、分、秒)的几点总结
  5. jeecg boot一对多新增的附表不会主键是一个string_测试开发专题:spring-boot如何使用JPA进行双向一对多配置...
  6. 2021浙江高考宁波四中成绩查询,2021浙江高考成绩查询时间公布 几号能查分
  7. c语言 若未给全局变量赋初值,自我测试练习参考-答案.doc
  8. c语言传递多个参数给线程,关于ssl多线程参数的传递
  9. 移动场景在其缩略图中显示场景中所显示的区域
  10. [LCP28] 采购方案