繁体   English   中英

为什么拒绝连接到localhost?

[英]Why connection to localhost is refused?

我有一台服务器,客户端计算机连接到该服务器。 最近,我决定用stunnel加密连接,因此现在客户端程序不直接连接到服务器,而是直接连接到localhost:8045(我检查了一下,这个端口没有被占用)。

Java代码:

URL url = new URL("http://localhost:8045/malibu/GetProviders");
InputStream stream = url.openStream();

我得到以下信息:

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at java.net.Socket.connect(Socket.java:469)
    at java.net.Socket.<init>(Socket.java:366)
    at java.net.Socket.<init>(Socket.java:180)
    . . .

如果我尝试使用curl请求相同的页面,一切都很好。

什么会导致这种行为?

编辑:是的,有一个侦听套接字-运行netstat -avn | grep 8045 netstat -avn | grep 8045提供:

tcp6       0      0 ::1:8045                :::*                    LISTEN

侦听套接字绑定到IPv6环回地址(:: 1)。 我回想起一些Java问题,它们不正确地支持双栈IPv4 / IPv6系统。 这可能是这种情况。 它仅连接到127.0.0.1(IPv4)。

您尝试过的所有其他操作(curl,telnet ...)都将首先尝试IPv6地址,然后在失败的情况下使用IPv4地址。 这就是为什么它们起作用,而Java应用程序却不能起作用的原因。

尝试强制将tunnel绑定到127.0.0.1。 您也可以尝试将Java连接到http://[::1]:8045/malibu/GetProviders ,尽管我不记得它是否支持HTTP URL中的IPv6地址。

我在Windows上具有Apache,并且Java拒绝了连接。 但是调试连接和Apache日志显示,这实际上不是连接问题 Apache返回错误301,已永久移动。 然后,它提供了指向不存在的端口8080的重定向URL。因此服务器配置有问题,可能是ServerName指令使用了错误的端口。 在请求的网址后面添加斜杠可解决此问题。 在我的情况下,最有用的调试输出是由wget提供的。

接受的答案可能无法解释这种现象。 记者本人在评论中承认,他最终在结尾处使用了带斜杠的网址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM