2012-03-22 8 views
1

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

Проблема в том, что при отправке второго запроса 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); 
    } 

} 

EDIT: (! Все они работают правильно, проверены на существующий файл - успешно загружен) Переменные сообщения клиента являются нижеследующие

NEWURL: http://wlab.cs.bilkent.edu.tr/~cs421/pa1/302-redirect-success.txt
host2: wlab.cs.bilkent. edu.tr
path2: /~cs421/pa1/302-redirect-success.txt
filename2: 302-редирект-success.txt

+0

Можете ли вы указать, что содержит переменная clientMessage? –

ответ

0

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

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

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

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

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