Проблемы с чтением содержимого http сообщения из сокета, только получение заголовка - PullRequest
0 голосов
/ 23 августа 2011

сервер

 public void HandleConnection(Socket socket) {
    OutputStream out = socket.getOutputStream();
    InputStream in = socket.getInputStream();
              BufferedReader br = new BufferedReader(new InputStreamReader(in));
              String strLine;
              try {
                while ((strLine = br.readLine()) != null)   {
                  System.out.println (strLine);
                  }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

клиент

public void httpPostTest() {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://192.168.0.2:8080/");

        try {
            httppost.setEntity(new StringEntity("test"));
            HttpResponse response = httpclient.execute(httppost);
        } catch (ClientProtocolException e) {
         e.printStackTrace();
        } catch (IOException e) {
         e.printStackTrace();
        }

    }

Есть мысли по этому поводу?Это все, что я получаю, только заголовок:

POST / HTTP/1.1
Content-Length: 4
Content-Type: text/plain; charset=ISO-8859-1
Host: 192.168.0.2:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.2 (java 1.5)




public String readLine(InputStream inputStream) {
        StringWriter writer = new StringWriter();
        try {
            IOUtils.copy(inputStream, writer, "ASCII");
        } catch (IOException e) {
            e.printStackTrace();
        }
        String theString = writer.toString();
        return theString.trim();
    }

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Из того, что я понял после некоторого чтения, BufferedReader - плохой способ чтения inputStreams из http-поста. Что я испытывал, так это то, что клиент, создавший сообщение, зависал и так, что поток обработчика соединения в каждом сообщении, когда я убивал клиента, сервер переставал зависать, и я видел тело сообщения. Из того, что я собрал в интернете, лучший способ прочитать входной поток - это пройти по нему побайтово и выйти из цикла после суммы байтов == значение длины содержимого.

Тем не менее, я планирую использовать Apache HTTPCore вместо этого, чтобы справиться с этим, поскольку это кажется лучшим решением

0 голосов
/ 05 января 2017

Для чего, если кто-то придет сюда, как я, вот что я написал

InputStream stream = socket.getInputStream();

byte[] b = new byte[1024];
while(stream.read(b) > 0 && !socket.isInputShutdown()) {
    System.out.println(new String(b));
    b = null;
    b = new byte[1024];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...