Java HTTP Post - странное поведение потока - PullRequest
1 голос
/ 23 августа 2010

Я работал над постом HTTP, используя java, и столкнулся со странным поведением потока.Вот что произошло:

Func() {
    String data = “MyMessage”
    URL url = new URL("http://edsall:8080"); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 

    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

    wr.write(data); 
    wr.flush();         

    // Get the response 
    String line; 
    while ((line = rd.readLine()) != null) { 
    } 

    wr.close();
    rd.close();
}

Request recvd by the server:
POST / HTTP/1.1
User-Agent: Java/1.6.0_20
Host: edsall:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 0

Обратите внимание, что длина контента всегда равна 0. Изначально я не мог понять, в чем проблема.Наконец, следующая перестановка кода сделала свое дело:

Func() {
    …
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    …
}

Я не могу понять это ясно.Как открытие дескриптора входного потока влияет на выходной поток?

Ответы [ 2 ]

1 голос
/ 23 августа 2010

Открытие входного потока (или запрос статуса) «фиксирует» запрос - то есть запрос отправляется на сервер.

Я не уверен, что случилось с данными, которые вы записали в выходной поток (я бы надеялся на исключение, если он на самом деле не был отправлен), но заголовок длины содержимого отправляется (с длиной нуля), когда вызывается getInputStream().

Весь запрос должен быть отправлен до доступа к какой-либо части ответа. Это нормальное URLConnection поведение.

0 голосов
/ 24 августа 2010

Удалите флеш и поместите wr.close () на его место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...