Сервер не отвечает на одновременные запросы в клиенте HTTP / 1.1, использующем Java - PullRequest
1 голос
/ 22 марта 2012

Я пытаюсь реализовать простое клиентское приложение HTTP / 1.1 на удаленном HTTP-сервере. Если у меня есть ответ 301 Moved Permanently от сервера, я попытаюсь загрузить файл из его нового местоположения, указанного в ответе сервера. Я могу отправить первое сообщение GET на сервер и получить новый URL, куда был перемещен файл, который я запросил.

Проблема в том, что когда я отправляю второй запрос GET от моего клиента с новым местоположением файла, сервер возвращает null. Не уверен, что что-то не так с написанием клиентского сообщения или чтением ответа сервера. Вот мой код, любая помощь приветствуется.

else if(serverMessage.equals("HTTP/1.1 301 Moved Permanently"))
{
     System.out.println(" A new permanent URL is assigned to the file " + fileName);
     serverMessage="";
     lineCount=0;
     while((serverMessage = reader.readLine()) != null)
     {          
         lineCount++;
         System.out.println("reply: " + serverMessage);
         if(serverMessage.indexOf("Location") >= 0 )
         {
              for(int x=serverMessage.indexOf("Location")+10; x<serverMessage.length(); x++)
              {
                      newURL= newURL + serverMessage.charAt(x); 
              }
          }

      }
     System.out.println("newURL : " + newURL);
     host = findHost(newURL);

     path = findPath(newURL);

     fileName=findFileName(newURL);                   

     clientMessage = "GET ";
     clientMessage = clientMessage + path;
     clientMessage = clientMessage + " HTTP/1.1\r\nHost: ";
     clientMessage = clientMessage + host;
     clientMessage = clientMessage + "\r\n\r\n";

     System.out.println("client message: \"" + clientMessage +"\"");

     writer.newLine();
     writer.write(clientMessage);
     writer.flush();

     serverMessage = reader.readLine();
     System.out.println("reply2: " + serverMessage); //returns null!!!

     while((serverMessage=reader.readLine())!=null)
     {
           System.out.println("reply2: " + serverMessage);
     }

}

РЕДАКТИРОВАТЬ: Переменные сообщения клиента являются следующие (все они работают правильно, проверены на существующий файл - успешно загружены!)

newURL: http://wlab.cs.bilkent.edu.tr/~cs421/pa1/302-redirect-success.txt
host2: wlab.cs.bilkent.edu.tr
путь2: /~cs421/pa1/302-redirect-success.txt
имя_файла2: 302-redirect-success.txt

1 Ответ

0 голосов
/ 22 марта 2012

Используете ли вы постоянный URLConnection / HttpURLConnection?

Возможно, вы получаете null, если сервер закрыл соединение.

Если вы используете постоянные соединения, возможно, сервер не успел ответить.

Этот может описать проблему немного лучше. Проверьте время ожидания, указанное в doHttpUrlConnectionAction(String desiredUrl). Вы можете найти ответ там.

Если это ваша проблема, вы можете попытаться выполнить несколько чтений с интервалом 0,1 секунды, скажем ... 1-5 секунд. Это сделано для того, чтобы вы быстро получили ответ и не ожидали полного таймаута, чтобы убедиться, что сервер ответил.

...