2016-01-07 2 views
0

Я пытаюсь создать HTTP-сервер в java.Чтение из сокета с использованием буферизованных блоков чтения

Ниже приведен фрагмент моего кода.

ServerSocket s = new ServerSocket(80); 
     while(true){ 
      Socket client = s.accept(); 
      BufferedReader in = new BufferedReader(
        new InputStreamReader(client.getInputStream())); 

      String input = in.readLine(), ff; 
      System.out.println(input); 
      while((ff = in.readLine()) != null){ 
       System.out.println(ff); 
      } 
      System.out.println("asd"); 
      in.close(); 
      client.close(); 
     } 

Asd никогда не печатается. Когда я пытаюсь выполнить POST на локальном хосте, он отправляет мне все заголовки, но не отправляет никаких данных контента. Он просто ждет, ничего не делая.

Я делаю запись с помощью Jquery

$.post("http://127.0.0.1/", 
     { 
      name: "Donald Duck", 
      city: "Duckburg" 
     }, 
     function(data,status){ 
      alert("Data: " + data + "\nStatus: " + status); 
     }); 

Это то, что печатается на экране:

POST/HTTP/1.1 
Host: 127.0.0.1 
Connection: keep-alive 
Content-Length: 5 
Accept: */* 
Origin: http://www.w3schools.com 
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/47.0.2526.73 Chrome/47.0.2526.73 Safari/537.36 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 

Вот и все, ничего после этого. В этот момент он ждет бесконечно.

+0

Можете ли вы рассказать нам о том, что напечатано? Разве вы не должны делать client.getOutputStream() и писать на него вместо System.out? – bcampolo

+0

Я просто хочу посмотреть содержимое, которое мой браузер отправляет мне на данный момент. Мне нужно обработать данные, которые я получаю дальше. Обновлен вопрос и включил вывод командной строки. @bcampolo – Aditya

+0

Облицовка одной и той же проблемы с Firefox. – Aditya

ответ

0

Моя догадка бы, что ваше фактическое содержание/полезная нагрузка не завершается ожидаемым разделителями линии, как описано в BufferedReader#readLine().

Это блокирует ваш вызов in.readLine().

Вместо этого я попытался использовать метод read() и посмотреть, поможет ли это. Как и в

while((value = in.read()) != -1) { 
    char c = (char)value; 
    System.out.println(c); 
} 

Edit: На самом деле, ваш вопрос, скорее всего дублей этот вопрос: Buffered Reader HTTP POST

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