首页 > 其他分享 >netty client请求127.0.0.1:8081,server端无响应问题排查

netty client请求127.0.0.1:8081,server端无响应问题排查

时间:2024-03-05 12:12:16浏览次数:24  
标签:netty 127.0 8081 0.1 server client

问题描述

代码:https://github.com/normanmaurer/netty-in-action/tree/2.0-SNAPSHOT/chapter2
利用netty,起了两个服务:
echoServer,绑定 8081 端口。
echoClient,请求 127.0.0.1:8081 端口。

client 和 server 建立链接之后,并发送报文:

public class EchoClientHandler
    extends SimpleChannelInboundHandler<ByteBuf> {
    @Override
    public void channelActive(final ChannelHandlerContext ctx) {
        ChannelFuture channelFuture = ctx.writeAndFlush(Unpooled.copiedBuffer("Netty rocks!",
                CharsetUtil.UTF_8));
    }
}

此时echoServer却没有触发ChannelInboundHandlerAdapter::channelRead函数调用。

public class EchoServerHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        ByteBuf in = (ByteBuf) msg;
        System.out.println(
                "Server received: " + in.toString(CharsetUtil.UTF_8));
        ctx.write(in);
    }
}

百思不得其解。

问题排查

image
我的电脑上有两个进程在监听 8081 端口。
image

  • vscode,监听的是127.0.0.1:8081
  • netty server监听的是*.8081,也就是客户端请求任意一个网卡上的 8081 端口,都是达到这个地址

知识点 1: 同一个机器允许多个进程绑定同一个端口, 只要网卡不同就可以。

因此呢,我的netty client实际上请求的是 VsCode的系统进程。
把netty client的 ip 改为本机 ip 就正常了。

知识点2:当同一台机器上同时存在127.0.0.1:8081、*.8081两个server时,会优先匹配特定网卡上的 8081 进程,然后再匹配监听*.8081的进程。

我们来验证下知识点 2
还是上面的代码,分别起两个netty server,分别监听0.0.0.0:8081、127.0.0.1:8081:
image
image
第一步:netty client请求127.0.0.1:8081,监听了127.0.0.1:8081的server会收到请求。

第二步:netty client请求172.20.10.2 8081,监听了0.0.0.0:8081的 server 会收到请求

第三步:停掉监听了127.0.0.1:8081 的 server,netty client继续请求127.0.0.1:8081,此时监听了0.0.0.0:8081的 server 会收到请求

标签:netty,127.0,8081,0.1,server,client
From: https://www.cnblogs.com/xushengbin/p/18053651

相关文章

  • 问题:arcgis10.1连接SDE数据库时提示,未找到arcgis许可
    转自:https://blog.csdn.net/wodeboke_123/article/details/103800407因为我的许可文件是到2020年,所以SDE许可过期。1.问题如下:2.用PL/SQL打开自己的数据库,如图: 3.搜索SERVER_CONFIG表,其中的AUTH_KEY字段是许可信息,用语句改为新的授权信息即可 4.修改sql语句为:select*......
  • IIS部署 HTTP 错误 500.19 - Internal Server Error 解决步骤 由于权限不足而无法
    配置应用程序池的身份 调整文件和文件夹权限确保应用程序池的身份有权访问网站的目录和文件在网站中进行配置1.添加2.高级3.立即查找找到所需身份名称后添加权限 至少需要读取权限,如果应用程序需要写入文件或目录,则还需要写入权限 ......
  • 海战棋 V0.1.2
    海战棋V0.1.2!首先感谢我的同学qsy为我提供的游戏,此游戏为qsy设计,由我编程。玩法:两人共同游玩,注意一个人操作时另一个人不能看。V0.1V0.1.0(2023/11/25)基础代码,仍待完善,可能存在大量的BUG。教程还没写,等什么时候有时间了再写。V0.1.1.3把忘了写的潜艇写了,改了......
  • 简单了解HTTP、Websocket和Netty
    前言伴随着网络的快速发展,网络通讯越来越重要,通讯的快捷、安全、方便影响着用户的体验。本文将探讨这些技术的原理、特点以及在实际应用中的应用场景。1.HTTTP(超文本传输协议)HTTP是一种传输超文本的协议,它是现代互联网通信的基础。其特点包括:简单性:HTTP使用简单的请求-响应模......
  • sensitive-word v0.13 特性版本发布 支持英文单词全词匹配
    拓展阅读sensitive-word-adminv1.3.0发布如何支持分布式部署?sensitive-word-admin敏感词控台v1.2.0版本开源sensitive-word基于DFA算法实现的高性能敏感词工具介绍更多技术交流业务背景对于英文单词Disburse之类的,其中的sb字母会被替换,要怎么处理,能不......
  • Netty
    Netty官网:https://netty.io/Netty是一个NIO异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Java的NIO和Netty对比NIO缺点:NIO的类库和API繁杂,学习成本高,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要......
  • 抛弃Spring Cloud Gateway,得物 使用Netty架构100Wqps网关
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • Netty入门实践-模拟IM聊天
    我们使用的框架几乎都有网络通信的模块,比如常见的Dubbo、RocketMQ、ElasticSearch等。它们的网络通信模块使用Netty实现,之所以选择Netty,有2个主要原因:Netty封装了复杂的JDK的NIO操作,还封装了各种复杂的异常场景,丰富的API使得在使用上也非常方便,几行代码就可以实现高性能的网络......
  • 【转帖】localhost和127.0.0.1的区别
    plantegg.github.io/2023/09/24/localhost和127.0.0.1的区别/背景有人告诉我localhost和127.0.0.1的区别是localhost不经过网卡,把我惊到了,因为我还真不知道这个知识点,于是去特别去验证了一下,这是个错误的理解,localhost会解析成127.0.0.1然后接下来的流程和127.0.0.1一模一......
  • netty内存分配
    https://www.cnblogs.com/s686zhou/p/15714858.htmlhttps://www.jianshu.com/p/1ce3bc2d7c5e https://blog.csdn.net/wangwei19871103/category_9681495_2.htmlnetty4.1.50版本rss分配内存链路PooledByteBufAllocator#ioBuffer(intinitialCapacity,intmaxCapacity)=>Ab......