2012-05-25 2 views
3

Я использую HttpURLConnection для отправки данных на сервер через POST. Я устанавливаю заголовки, затем получаю выходной поток и записываю 5 байтов данных («M = 005»), затем закрывает выходной поток.Android HTTPUrlConnection POST

На сервере я получаю все заголовки, правильную длину содержимого, но затем я получаю строку с нулевой длиной и сервер зависает на readLine.

Похоже, что закрытие клиента никогда не происходит, поэтому все данные не записаны, поэтому сервер никогда не получает его.

Я читал многочисленные примеры и пробовал различные изменения, чтобы увидеть, могу ли я воздействовать на них любым способом с менее желаемыми результатами. Например, отключить keep alives, заставляя CRLF на конце моих данных (что заставляет мои данные выходить на сервер, но соединение все еще не закрывается. (Это было просто для тестирования), пытаясь использовать устройство печати. ​​

Так много примеров делают то, что я, я предполагаю, что это что-то просто я с видом, но я просто не могу видеть это. Любая помощь будет оценена.

StringBuilder postDataBuilder.append("M=").append(URLEncoder.encode("005", UTF8)); 
    byte[] postData = null; 
    postData = postDataBuilder.toString().getBytes(); 


    url = new URL("http://" + serverAddress + ":" + String.valueOf(serverPort)); 
    conn = (HttpURLConnection) url.openConnection(); 

    conn.setDoOutput(true); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Length", Integer.toString(postData.length)); 
    conn.setUseCaches(false); 

    OutputStream out = conn.getOutputStream(); 
    out.write(postData); 
    out.close(); 

    int responseCode = conn.getResponseCode(); 

    // After executing the above line the server starts to successfully readLines 
    // until it gets to the post data when the server hangs. If I restart the 
    // client side then the data finally gets through but the connection on the 
    // server side never ends. 

ответ

3

по электронной почте Ой. Ошибка на нашей стороне сервера, который делает readLine вместо прочитанного символа. Поскольку нет CRLF, он будет висеть.

Смежные вопросы