Я пытаюсь получить весь диапазон текстовых файлов по диапазону, который конкретно определен. 1-й запрос успешно завершен, но когда я делаю второй запрос на получение второй части, я не смог получить никакого ответа, только нули. Чего-то не хватает? Я поместил цикл while, чтобы наблюдать, будет ли какое-либо значение после нулей, но я не мог видеть!
Я не использую никакой специальной библиотеки для этого сокета http. Я просто создаю сокет с портом 80 и буферизованным писателем (писателем) и буферизованным читателем (читателем) для связи с сервером.
Это весь метод. Я обновил вопрос:
public static void rangedRequest(String host, String url, int totalPartNum, String outputFile) throws IOException{
String headRequest = "HEAD " +url+" HTTP/1.1\r\n"
+ "Host: "+ host +"\r\n\r\n";
Socket sock = null;
BufferedWriter writer = null;
BufferedReader reader = null;
try {
sock = new Socket(host, 80);
writer= new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
reader= new BufferedReader(new InputStreamReader(sock.getInputStream()));
} catch (UnknownHostException ex) {
System.out.println("ERROR:Unknown host");
System.exit(0);
}
writer.write(headRequest);
writer.flush();
/***************Response**************/
String response;
int totalLength = 0;
do{
response = reader.readLine();
if(response.indexOf("Content-Length") > -1){
totalLength = Integer.parseInt(response.substring(response.indexOf(' ')+1));
response = null;
}
}while(response != null);
/****File Length infor is received****/
BufferedWriter output = new BufferedWriter(new FileWriter(outputFile));
int range = totalLength/totalPartNum;
for (int i = 0; i < totalPartNum; i++) {
String getRequest = "GET " + url + " HTTP/1.1\r\n" +
"Host: "+ host + "\r\n" +
"Range: bytes="+ i*range + "-" + ((i+1)*range -1) +
"\r\n\r\n"; //get range query
writer.write(getRequest);
writer.flush();
boolean afterInfo = false;
while(!reader.ready()){}
do{
response = reader.readLine();
if(response.indexOf("Range")>-1){ //After some information, there is an empty line and data
afterInfo = true; //To understand info part is reached
}
}while(!(response.length() < 1 && afterInfo));
while(response != null){
output.write(response);
response = reader.readLine();
}
}
sock.close();
}