HttpURLConnection的connect()方法作用
如题,我用下面的代码可以实现往服务器端传递数据,
URL url = new URL("http://localhost:8088/Test/streamtestserver.do");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/stream");
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setInstanceFollowRedirects(true);
con.connect();
DataOutputStream d = new DataOutputStream(con.getOutputStream());
d.write("111".getBytes());
d.flush();
d.close();
但是我把con.connect();注掉后仍可以实现,所以不知道con.connect();的用处和在,是不是只要
url.openConnection();后就已经建立连接了?
还有一个问题就是我把d.flush()和d.close()方法去掉后仍可以向服务器端输出数据,那d.flush()的用处是什么?
------解决方案--------------------API:
connect
public abstract void connect()
throws IOException打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。
如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用。
URLConnection 对象经历两个阶段:首先创建对象,然后建立连接。在创建对象之后,建立连接之前,可指定各种选项(例如,doInput 和 UseCaches)。连接后再进行设置就会发生错误。连接后才能进行的操作(例如 getContentLength),如有必要,将隐式执行连接。
抛出:
SocketTimeoutException - 如果在建立连接之前超时期满
IOException - 如果打开连接时发生 I/O 错误。
另请参见:
connected, getConnectTimeout(), setConnectTimeout(int)
------解决方案--------------------d.flush();//强制把缓冲区的数据写入到文件并清空缓冲区
d.close();//关闭连接
其实调用close()之前也会强制把缓冲区的数据写入到文件并清空缓冲区,所以一般写一个close就行了,没必要2个都写.
close()就是关闭连接,如果不用了就关掉,否则会占用系统资源.