안드로이드와 서버와의 통신에서 연결하는 절차


-. URL로 연결할 지점에(접속할 주소) 대한 객체를 만든다. 


URL url = new URL("http://www.google.com");


※ URL이란 A Uniform Resource Locator that identifies the location of an Internet resource 

as specified by RFC 1738.


-. HttpURLConnection 클래스의 openConnection() 메소드로 해당 주소에 접속한다. 

이때 반환되는 객체가 URLConnection 클래스의 객체이다. 이때 프로토콜이 뭐냐에 따라 

HttpURLConnection, FtpURLConnection... 등이 반환된다. 따라서 해당 프로토콜에 맞게 다운캐스팅해서 사용하면된다.


HttpURLConnection httpURL = (HttpURLConnection)url.openConnection();


-. 해당 프로토콜에 필요한 각종 속성을 설정한다. API문서를 참조


httpURLCon.setConnectTimeout(10000);

httpURLCon.setUseCaches(false);


-. Http 연결일 경우는 요청방법을 지정해야 한다. 


httpURLCon.setRequestMethod("GET"); //이게 디폴트

httpURLCon.setRequestMethod("POST");


-. 모든 속성이 완료되면 서버에 요청을 보낸다. 요청이 무사히 전달됐으면 HTTP_OK(200)가 리턴된다. 반환되는 값에 대한 정보는 HttpURLConnection 클래스에 Constants로 잘 정의되어 있다.


httpURLCon.getResponseCode(); //public int getResponseCode ()


-. 다음과 같이 BufferedReader를 이용해서 서버에서 보내온 데이타를 읽는다.

BufferedReader 클래스는 생성자의 매개인자로 Reader 클래스의 객체가 와야 한다.

public BufferedReader (Reader in)

여기서 Reader클래스를 상속받은 클래스들이 BufferedReader, CharArrayReader, FilterReader, 

InputStreamReader, PipedReader, StringReader이다.

따라서 생성의 매개인자로 Reader클래스를 상속받은 하위 클래스의 객체가 올수있다. 

따라서 InputStreamReader 객체가 올 수 있다. 

InputStreamReader의 객체 생성은 생성자가 아래와 같이 되어 있다.


InputStreamReader(InputStream in) ==> InputStreamReader의 생성자. 매개인자로는 InputStream 객체가 올수 있다.

매개인자로 들어갈 InputStream 객체를 얻는 방법은 URLConnection의 메소드인 getInputStream()을 통해서 얻을 수 있다.


public InputStream getInputStream() ==> 이 메소드는 HttpURLConnection이 상속받은 상위 클래스인 URLConnection의 메소드인데 상속 


BufferedReader br = new BufferedReader(new InputStreamReader(httpURLCon.getInputStream()));

String temp = ""; //서버에서 보내온 데이터를 받을 공간


BufferedReader클래스의 메소드 가운데 이런 편리한 메소드가 있다. 


public String readLine () 

      ⇒ Returns the next line of text available from this reader. 

          A line is represented by zero or more characters followed 

          by '\n', '\r', "\r\n" or the end of the reader. 

          The string does not include the newline sequence.

      ⇒ Returns : the contents of the line or null if no characters were read before the end of the reader has been reached.

      ⇒ 한 마디로 readLine() 메소드는 캐리지 리턴을 기준으로 한 라인씩 읽어서 String으로 반환한다.


다음과 같이 서버로 부터 보내온 데이터를 읽으면 된다.


String addr = "";

for(;;){

      temp = br.readLine();

      if (temp == null) 

         break;

      addr += temp;

}

       

br.close(); //다 읽었으면 닫아 준다.

httpURLCon.disconnect(); //연결을 끊어 준다.


네트워크에 연결하는 경우는 다양한 이유로 연결에 실패할 수 있기 때문에 각종 Exception이 발생할 수 있다. 이에 대해서는 API문서를 참조할 것.




+ Recent posts