2015-04-09 3 views
0

Я довольно новый в java, и это мой код. Я хочу написать простой java socket explorer , что вы вводите «хост» и «путь», и он отправит http-запрос для этого хоста, а затем сохранит html-файл или изображение или т. Д. На вашем компьютере. Проблема в том, что сокет получает HTTP-ответ, но программа не может сохранить какую-либо вещь.program сделать файл, но файл пуст. Я знаю, что это проблема нижней строки, но я не знаю решения? в то время как ((а = s.getInputStream(). Прочитать (inputline))! = -1) любая помощь, пожалуйста,Что такое вывод (socket.getInputStream(). Read (byte []))?

public class explorer { 

    private static Socket s; 

    @SuppressWarnings("unused") 
    public static void main(String[] args) 
    { 
     try 
     { 
      BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); 
      String host ="google.com"; 
      String path ="/images/srpr/logo11w.png"; 
      s = new Socket(host, 80); 
      PrintWriter pw = new PrintWriter(s.getOutputStream()); 
      pw.println("GET " + path + " HTTP/1.1"); 
      pw.println("Host:"+host); 
      pw.println(""); 
      pw.flush(); 
      String[] parts = path.split("/"); 
      String filename = parts[parts.length-1]; 
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
      byte [] inputline =new byte[2000]; 
      byte [] inputline2 =new byte[300000]; 
      int a=0; 
      int resultlenght=0; 
      FileOutputStream fos=new FileOutputStream("C:/Users/mahmoud/Desktop/"+filename); 
      while ((a=s.getInputStream().read(inputline)) != -1) 
        { 
         System.arraycopy(inputline,0, inputline2,resultlenght,a); 
         resultlenght+=a; 
      } 
      for(a=0;;a++) 
      { 
       if(inputline2[a]==13 && inputline2[a+1]==10 && inputline2[a+2]==13 && inputline2[a+3]==10) 
       { 
        break; 
       } 
      } 
      byte [] inputline3 =new byte[300000]; 
      System.arraycopy(inputline2, a+4, inputline3, 0, inputline2.length-a-4); 

      fos.write(inputline3,0,inputline3.length); 
      fos.flush(); 

      fos.close(); 
      in.close(); 
       } 
      catch (UnknownHostException e) { 
       System.out.println("Exception: "+e); 
       } 
       catch (Exception ex) { 
       System.out.println("Exception: "+ex); 
       } 
    } 
} 

ответ

0

read(byte[] b) возвращает

общее количество прочитанных байтов в буфер , или -1, если данных больше нет, потому что конец потока достигнут.

До -1 возвращается, число байтов, считанных из InputStream копируется в буфер b.

+0

действительно спасибо поэтому почему, когда я запускаю код, он останавливается на этой строке и не меняет значение переменной a на -1 –

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