반응형
음 갑자기 소켓 이야기가 나와서 당황하시지는 않으셨지요?
다른 카테고리에 만들려고 했는데, 2단계 밖에 안되서 따로 추가하기 불편하군요.. 흠 다른 목록을 만들어야 되는지..
아래는 스레드와 소켓, HTTP GET 명령어를 사용하여 특정 페이지를 파싱해오는 소스입니다.
혼자서 사용할 일이 있어서 작성했는데 혹시 필요한 분이 있으면 사용하시기 바랍니다. (과연 도움이 되는 소스일려나;)
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.net.Socket;
- /* Main Class */
- public class Example1{
- public static void main(String[] args){
- String url="www.naver.com"; // Host 정보
- String page1="/test/aaa.php"; // Page1 정보
- String page2="/test/bbb.php"; // Page2 정보
- //Thread 생성
- Thread tpHTML1 = new Thread(new parsingHTML(url, page1)); //aaa.php
- Thread tpHTML2 = new Thread(new parsingHTML(url, page2)); //bbb.php
- //Thread 시작
- tpHTML1.start();
- tpHTML2.start();
- }
- }
- /* Parsing 을 위한 클래스 */
- class parsingHTML implements Runnable{
- String page = null; //Page 정보
- String url = null; //Host Url 정보
- String data = ""; //Data 정보
- int contentLength = 0; //contentLength 정보
- public parsingHTML(String url, String page){
- this.url = url; //Host parameter를 방음
- this.page = page; //Page parameter를 받음
- }
- /* HTML 데이터를 가져오기 위한 메소드 */
- public void readData(){
- try {
- Socket socket = new Socket(this.url,80); //소켓을 통해 연결
- //소켓 통신 하기 위한 버퍼 생성
- BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
- //GET 으로 웹페이지 정보 요청
- bw.write("GET " + page + " HTTP/1.1\n");
- bw.write("Host: " + url + " :80\n\n");
- bw.flush();
- //웹페이지 정보를 받기위한 문자열
- String newLine = "";
- //웹페이지 정보에서 Content-Length 정보를 Parsing
- while((newLine = br.readLine())!=null){
- if (newLine.startsWith("Content-Length: ")) {
- this.contentLength = Integer.parseInt(newLine.substring(16)); //Content-Length 값 할당
- continue;
- }
- //웹페이지 정보에서 <body> 정보를 Parsing
- if (newLine.equals("")) { //body 내용이 시작 될 때
- for(int i=0; i<this.contentLength;i++){ //Content-Length 만큼 정보를 가져옴
- char data = (char)br.read();
- this.data = this.data + data; //data 값에 String 혛 변환 후 할당
- }
- break;
- }
- }
- socket.close(); //소켓 종료
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- /* data를 TXT 파일오 쓰기위한 메소드 */
- public void writeDataFile() {
- try{
- File test = new File("C:\\test"); //C:\test 폴더 생성
- test.mkdir();
- FileWriter fw = new FileWriter("C:\\test\\"+ this.page.substring(5, 9) +".txt"); //aaa, bbb로 txt파일 생성
- fw.write(this.data); //data 쓰기
- fw.close();
- }catch (IOException e) {
- e.printStackTrace();
- }
- }
- /* Thread Start */
- public void run() {
- this.readData();
- this.writeDataFile();
- }
- }
반응형
'Programer > Android (Java)' 카테고리의 다른 글
JAVA 참고 사항 (0) | 2014.03.07 |
---|---|
JAVA 클래스 - Part 4 (0) | 2013.07.16 |
JAVA 클래스 - Part 3 (0) | 2013.06.25 |
JAVA 클래스 - Part 2 (0) | 2013.06.24 |
JAVA 클래스 - Part 1 (0) | 2013.06.18 |