Java 套接字getOutputStream花费的时间太长

Java 套接字getOutputStream花费的时间太长,java,sockets,ssl,https,Java,Sockets,Ssl,Https,connect方法立即返回,但getOutputStream被卡住的时间太长 对于某些套接字地址,它并不总是太长 对于HTTPS(端口443)getOutputStream()运行良好,但对于HTTP(端口80)则无法正常工作 对于HTTPS(端口443),getOutputStream()工作得很好,但对于HTTP(端口80),它却无法正常工作 使用SSLSocket?严肃点。端口80是纯文本。它不会响应SSL握手,至少不像预期的那样。我很惊讶你没有得到握手例外 对HTTP使用明文套接字,对H

connect
方法立即返回,但
getOutputStream
被卡住的时间太长

对于某些套接字地址,它并不总是太长
对于HTTPS(端口443)
getOutputStream()
运行良好,但对于HTTP(端口80)则无法正常工作

对于HTTPS(端口443),getOutputStream()工作得很好,但对于HTTP(端口80),它却无法正常工作

使用
SSLSocket
?严肃点。端口80是纯文本。它不会响应SSL握手,至少不像预期的那样。我很惊讶你没有得到握手例外


对HTTP使用明文套接字,对HTTPS使用SSL。实际上,你应该同时使用
HttpURLConnection
,并停止尝试运行你自己的程序。

太长了多长时间?太长了,我不得不停止这个程序它并不总是太长,只是为了某个套接字地址-防火墙问题?@太长了,我不知道我正在尝试连接端口80上的http服务器,实际上我使用的是
SSLSocket
而不是
Socket
。当我尝试https的443端口时,
getOutputStream
工作得很好,但我认为
Socket
SSLSocket
不是一个好方法problem@EJP我已经调试过,我确信
connect
立即返回。我认为应该有一个异常,以便我知道目标套接字地址不是SSL套接字。但也不例外,它只是stuckI通过调用
socket.setSoTimeout(5000)
服务器是什么解决了这个问题?如果是自制的,它可能仍在尝试读取请求行。服务器未知。我正在编写一个客户端来连接我自己的服务器,但连接哪台服务器取决于用户输入(主机名和端口),因此我必须确定服务器是我自己的服务器还是任何其他服务器。不,您不需要。不管它是不是你的服务器,都没有任何区别。您只需确定或询问用户它是HTTP还是HTTPS,并使用适当的套接字工厂:
javax.net.SocketFactory
javax.net.ssl.SSLSocketFactory
Socket socket = sslSocketFactory.createSocket();
socket.connect(new InetSocketAddress(hostname, port), 5000);
OutputStream out = socket.getOutputStream(); // this takes too long