Android - Networking
이 글에서는 안드로이드의 Networking 실습을 한 내용을 다룬다.
소켓 프로그래밍
소켓을 이용하여 안드로이드 앱과 통신을 주고받는 모습. |
기본적으로 안드로이드에서는 TCP/IP방식의 소켓을 사용하여 통신을 한다. 이 소켓을 사용하기 위해 서버와 클라이언트의 개발이 필요하다. 실시간으로 처리해야하는 데이터가 있다면, HTTP보다 소켓 통신이 우월하다.
안드로이드에서 소켓을 이용할때는 표준 자바 소켓을 그대로 사용가능하다.
서버에는 아래처럼 서버 포트를 이용한 소켓을 만들어 둔다.
int SERVER_PORT = 200;
ServerSocket server = new ServerSocket(SERVER_PORT);
System.out.println("Server]서버가 실행됨. 포트 : " + SERVER_PORT);
| cs |
클라이언트에서는 서버 소켓으로 연결하기 위해 서버 IP와 포트를 사용한 소켓을 만든다.
String SERVER_IP = "localhost";
int SERVER_PORT = 200;
Socket aSocket = new Socket(SERVER_IP, SERVER_PORT);
System.out.println("Client] 서버 접속");
| cs |
위처럼 기본적인 소켓 설정을 한 이후에는 InputStream/OutputStream을 이용해 통신하면 된다.
웹페이지 요청
HttpURLConnection을 이용하여 구글 홈페이지의 html문서를 텍스트 형태로 받은 모습. |
안드로이드에서는 URL Class를 통해 URL을 입력받고, HttpURLConnection Class를 사용하여 웹페이지 요청을 InputStream/OutputStream형태로 request/response 할 수 있다.
아래는 HttpURLConnection 클래스의 request 설정 메소드 일부이다.
setConnectTimeout(int timeout) :
timeout 시간만큼 연결을 시도하고 그 안에 연결이 되지 않는 경우, 연결시도를 중단한다.
setRequestMethod(“GET”) :
웹페이지 요청 방식을 Get과 Post중 어떤 방식으로 할지 설정한다.
setRequestProperty(String key, String value) :
웹페이지 요청 우선순위를 설정한다. 동일한 key가 존재하면 그 key에 value(우선순위)를 덮어씌운다.
setDoOutput(boolean dooutput):
outputStream으로 데이터를 넘길지 결정한다.
setDoInput(boolean doinput):
InputStream에서 데이터를 읽을지 결정한다.
RSS데이터
Google news의 RSSfeed를 파싱하여 ListView에 표시한 모습. |
RSS데이터의 경우 웹페이지 요청으로 데이터를 받고, 태그별로 파싱을 해주면 된다.
자세한 설명이 될 수는 없으나, 파싱 과정은 다음 코드에서 주석부분으로 설명하였다.
웹페이지 요청을 이용하면, 로그인 기능도 구현이 가능하다.
위 어플리케이션에서는 미리 준비되어 있는 서버의 URL(php사용)을 이용하여 로그인기능을 구현했다.
위는 로그인에 필요한 계정명과 암호를 제대로 넣었을 때 화면이며,
아래는 틀리거나 입력하지 않았을 때 화면이다.
Source Code : https://github.com/SBSide/Network
댓글
댓글 쓰기