Java Spring Boot远程连localhost被拒,换公网IP正常求排查
连接失败原因分析与解决
核心原因:localhost的指向与连接目标不匹配
远程主机上的localhost(对应IP 127.0.0.1)是本地回环地址,仅指向运行Java应用的远程主机本身。当你执行new Socket("localhost", port)时,Java应用会尝试连接远程主机自己的port端口,但这个端口并没有运行你的C应用——你的C应用是在另一台独立机器上的,所以必然出现Connection refused错误。
而使用公网IP时,连接请求会正确发送到C++应用所在的机器,所以能成功建立连接。
验证与补充排查
- 在远程主机上执行命令
telnet localhost port,会得到和Java应用一样的连接拒绝提示;执行telnet 公网IP port则能正常连通,可直接验证上述结论。 - 确认C应用的监听配置:如果C应用所在机器同时运行其他服务,可检查其监听地址是否为
0.0.0.0(允许所有网卡接收连接),不过从你用公网IP能正常连接来看,这一点大概率没问题。
解决方案
将Java代码中的连接地址替换为C++应用所在机器的实际可访问地址:
- 如果Java应用和C++应用处于同一局域网,使用局域网IP;
- 如果跨公网访问,使用公网IP或已配置的域名。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

