日期:2014-05-20  浏览次数:21498 次

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()就是关闭连接,如果不用了就关掉,否则会占用系统资源.