2012-08-31 141 views
4

我正在与服务器进行通信,理想情况下,我希望输入流和输出流总是处于启动状态。我收到未经请求的回复,因此我总是必须准备好接收输入流上的数据。持久I/O流连接

在我进一步深入之前,我应该说我所做的任何连接都必须能够支持SSL。

我遇到的问题是,当我打开一个HttpUrLConnection并从输出流发送的东西,它不会发送实际的输出,直到我打开输入流。如果我打开一个输入流,它会杀死输出流,并且在流关闭后似乎没有恢复它。

实现我想要的行为的最佳方式是什么?如果在一个端口上同时维护两个流是不可能的,有没有办法让我有两个单独的流通过一种端口锁定/开关共享连接?

是否有库用于发送输出而不必杀死输出流以表示我的请求结束?

+0

有没有人使用javax.net.ssl.SSLSocket?它是否表现出与流管理一样的行为? – Chad

回答

2

Http是一个单一的请求协议。

您不能(除非websocket)使用http(s)创建持久连接。你需要另一个协议。

可以使用基本插座。它的工作原理大部分是一个http连接,除了url以socket://开头。

您只需打开一个连接,然后就可以获取输入流和输出流并使用它们。

+0

谢谢,这让我走上了正轨。我使用SSLSocket并且完全成功。 – Chad

1

-我最好的选择是使用java.nio package

-使用SocketChannel的java.nio包,我们可以设置一个SocketChannel非阻塞模式。当你这样做时,你可以拨打connect(),read()write()异步模式。

+0

非阻塞模式如何回答问题?与阻塞模式相反? – EJP