Rog*_*ach 7 java url networking localhost stunnel
我有一台服务器,客户端机器连接到该服务器.最近我决定加密与stunnel的连接,所以现在客户端程序不是直接连接到服务器,而是连接到localhost:8045(我检查过,这个端口没有被占用).
Java代码:
URL url = new URL("http://localhost:8045/malibu/GetProviders");
InputStream stream = url.openStream();
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
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)
. . .
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用相同的页面curl,一切都很好.
什么可以导致这种行为?
编辑:是的,有一个监听套接字 - 运行netstat -avn | grep 8045给出:
tcp6 0 0 ::1:8045 :::* LISTEN
Run Code Online (Sandbox Code Playgroud)
cdh*_*wie 14
侦听套接字绑定到IPv6环回地址(:: 1).我记得Java不能正确支持双栈IPv4/IPv6系统的一些问题; 这可能就是这种情况.它仅连接到127.0.0.1(IPv4).
您尝试的其他所有内容(curl,telnet ...)将首先尝试IPv6地址,然后如果失败则返回IPv4地址.这就是他们工作的原因,而Java应用程序却没有.
尝试强制stunnel绑定到127.0.0.1.您也可以尝试使用Java连接http://[::1]:8045/malibu/GetProviders,但我不记得它是否支持HTTP URL中的IPv6地址.
| 归档时间: |
|
| 查看次数: |
61136 次 |
| 最近记录: |