2013-01-21 1 views
0

Я пытаюсь собрать HTML-код с этого сайта http://movies.about.com/od/actorsalphalist/Actors_Detailed_Movie_News_Interviews_Websites.htmСкрининг экрана Java с использованием сокетов?

Открываю сокет и пытаюсь читать и печатать каждую строку HTML-страницы. Когда я запускаю его, я получаю только «EOF is false», а затем «1».

Я не уверен, что не так, поскольку я знаю, что это должно работать в другом примере ... Большое спасибо за вашу помощь!

import java.net.*; 
import java.io.*; 
import java.util.*; 

public class Twitter { 

static final int DEFAULT_PORT = 80; 

protected DataInputStream reply = null; 
protected PrintStream send = null; 
protected Socket sock = null; 

// *********************************************************** 
// *** The constructors create the socket and set up the input 
// *** and output channels on that socket. 

public Twitter() throws UnknownHostException, IOException { 
    this(DEFAULT_PORT); 
} 

public Twitter(int port) throws UnknownHostException, IOException { 
    sock = new Socket("movies.about.com", port); 
    System.out.println(sock); 
    reply = new DataInputStream(sock.getInputStream()); 
    System.out.println(); 
    send = new PrintStream(sock.getOutputStream()); 
} 

// *********************************************************** 
// *** forecast uses the socket that has already been created 
// *** to carry on a conversation with the Web server that it 
// *** has been contacted through the socket. 

public void forecast() { 
    int i; 
    String HTMLline; 
    boolean eof, gotone; 

    // *** This issues the same query that a Web browser would issue 
    // *** to the Web server. 

    try { 
     send.println("GET /od/actorsalphalist/Actors_Detailed_Movie_News_Interviews_Websites.htm HTTP/1.1"); 
    } catch (Exception e) { 
     System.out.println("about.com server is down."); 
    } 

    // *** This section parses the response from the Web server. 
    // *** NOTE THAT "real" EOF does not occur until the Web server 
    // *** has closed the connection. 

    eof = false; 
    gotone = false; 
    while (!eof) { 
     System.out.println("EOF is false"); 
     try { 
      System.out.println("1"); 
      HTMLline = reply.readLine(); 
      System.out.println("2"); 
      System.out.println(HTMLline); 
      System.out.println("Here?"); 
      if (HTMLline != null) { 
       System.out.println("its not null"); 
      } 
      if (HTMLline == null) { 
       System.out.println("WTFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); 
      } else { 
       eof = true; 
       System.out.println("is it?"); 
      } 
     } catch (Exception e) { 
      System.out.println("this exception happend"); 
      e.printStackTrace(); 
      eof = true; 
     } 
    } 
} 

// *********************************************************** 
// *** We need to close the socket when this class is destroyed. 

protected void finalize() throws Throwable { 
    sock.close(); 
} 

// *********************************************************** 
// *** The main program creates a new Twitter class and 
// *** sends that class the command line args (via findNumber). 

public static void main(String[] args) { 
    Twitter aboutCom; 
    DataInputStream cin = new DataInputStream(System.in); 

    try { 
     aboutCom = new Twitter(); 
     aboutCom.forecast(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

ответ

1

Вы еще не отправили действительный HTTP-запрос, поэтому сервер все еще ждет вас, чтобы завершить его. Строка GET должна заканчиваться на \ r \ n, и тогда вам понадобится еще одна пустая строка, чтобы разграничить заголовки запросов.

Однако для этого вы должны использовать URL, openConnection(), getInputStream() и вместо того, чтобы излишне пытаться переназначить HTTP самостоятельно. Все, что вы получаете, это шанс ошибиться, как вы это делаете.

+0

ah в порядке, это для назначения с помощью сокетов! –

+0

@RussellFyfe ОК, поэтому используйте write() вместо println(), отправьте терминатор линии как \ r \ n и отправьте его дважды. – EJP

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

  • Нет связанных вопросов^_^