如题,我用下面的代码可以实现往服务器端传递数据,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()的用处是什么?
  我对文件操作时必须要写d.flush(),但这个却不用写,不解,不知道是不是原理没搞清。

解决方案 »

  1.   

    而URLConnection对象有两个阶段,第一个就是创建对象,这个已经有了,然后就是连接。
    你通过connect()方法就是进行连接,可是首先要判断connected连接标示是否已经连接上,如果已经连接上,则该方法调不调都没有用,如果没有连接上,调用connect方法,会主动尝试连接。该方法一般使用好像是HttpURLConnection conn=new HttpURLConnection(new URL("xxx"));这样构造的conn。因为这时是处于没有连接的状态。
    ---》还有一个问题就是我把d.flush()和d.close()方法去掉后仍可以向服务器端输出数据,那d.flush()的用处是什么?
    已经关闭了还发送?有点扯了吧。
      

  2.   


    我没有说关闭了可以发送啊,我是说把d.flush()和d.close()方法注掉。我的意思是一般不都是调用flush()后才把数据往输出流中发送么?我没有写这句话应该不会发送吧。
      

  3.   

    close了肯定是不能发了,flush只是刷新缓冲区,将全部数据送出去,肯定是可以继续发送了。
      

  4.   


    没有看清问题,我是说我不close,为什么可以发,按说不flush就无法把数据传送出去啊。