36
1 6 장 . GCF (Generic Connection Framework)

6 장 . GCF (Generic Connection Framework)

Embed Size (px)

DESCRIPTION

6 장 . GCF (Generic Connection Framework). Introduction. 1. GCF 소개 2. MIDP HTTPConnection 프로그래밍 3. MIDP HTTPConnection 상태 유지 4. MIDP StreamConnection 프로그래밍 5. MIDP DatagramConnection 프로그래밍. GCF 소개 (1). J2SE, J2EE 환경과 J2ME 환경차이 - J2SE 와 J2EE 의 입출력과 네트워크의 라이브러리를 사용하기에는 - PowerPoint PPT Presentation

Citation preview

Page 1: 6 장 . GCF  (Generic Connection Framework)

1

6 장 . GCF (Generic Connection Framework)

Page 2: 6 장 . GCF  (Generic Connection Framework)

2

Introduction

1. GCF 소개 2. MIDP HTTPConnection 프로그래밍

3. MIDP HTTPConnection 상태 유지

4. MIDP StreamConnection 프로그래밍

5. MIDP DatagramConnection 프로그래밍

Page 3: 6 장 . GCF  (Generic Connection Framework)

3

GCF 소개 (1)

• J2SE, J2EE 환경과 J2ME 환경차이 - J2SE 와 J2EE 의 입출력과 네트워크의 라이브러리를 사용하기에는 무리가 따른다 . 이러한 입출력과 네트워크에 대한 문제는 GCF 를 정 의 함으로써 해결이 가능 .

Page 4: 6 장 . GCF  (Generic Connection Framework)

4

GCF 소개 (2)

• J2SE, J2EE 플랫폼의 java.io, java.net 패키지를 사용할 수 없음 .

• GCF 개념

- 가능한 넓은 범위의 휴대 장치를 지원하기 위해 입출력과 네트워크 를 추상화하고 , 실제 구현은 각 장치 제조업체가 하도록 설계

• GCF 설계 목적

- 서로 다른 형태의 입출력 형태를 일관성있게 지원 - 서로 다른 형태의 프로토콜을 일관성있게 지원 - 어플리케이션 이식성 향상 - 표준 자바 클래스 라이브러리와 상위 호환 - 더 작은 메모리 풋프린트를 가짐

Page 5: 6 장 . GCF  (Generic Connection Framework)

5

GCF 소개 (3)

• GCF 구조도

Page 6: 6 장 . GCF  (Generic Connection Framework)

6

MIDP Connection 생성 (1)

• connection 은 일관성을 유지하기 위해 Connector class 의 open 메소드 하나를 사용하여 모든 Connection 을 생성

• open 메소드 정의

- static Connection open (String name)

Page 7: 6 장 . GCF  (Generic Connection Framework)

7

MIDP Connection 생성 (2)

• J2ME CLDC/MIDP 에서 Connection 을 생성하고 데이터를 주고 받는 절차

open() 메소드를 이용해 Connection 을 연다 .

Connection 을 이용해 InputStream 또는 OutputStream 을 만든다 .

데이터를 송신하거나 수신한다 .

Connection 과 Input/Output Stream 을 반드시 닫는다 .

Page 8: 6 장 . GCF  (Generic Connection Framework)

8

MIDP Connection 생성 (3)

1. Connection 열기

HttpConnection c = (HttpConnection) Connector.open( "http://aaa.bbb.ccc:80")

StreamConnection c = (StreamConnection) Connector.open("socket://aaa.bbb.ccc:1234")

DatagramConnection c = (DatagramConnection) Connector.open(“datagram://aaa.bbb.ccc:1234)

2. InputStream or OutputStream 만듬

DataInputStream dis = c.openDataInputStream();

DataOutputStream dos = c.openDataOutputStream();

Page 9: 6 장 . GCF  (Generic Connection Framework)

9

MIDP Connection 생성 (4)

3. 데이터 송 / 수신

dis.readChar() ;

dos.writeChar();

4. Connection 과 Input/Output Stream 닫기

c.close();

dis.close();

dos.close();

Page 10: 6 장 . GCF  (Generic Connection Framework)

10

GCF API 설명 (1)

• Connection 인터페이스

- GCF 에서 가장 기본이 되는 최상위 인터페이스로서 단지 열리고 닫는 기능만 한다 .

• StreamConnectionNotifier 인터페이스

- 연결이 설정될 때까지 기다리기 위해 사용되는 연결형 Connection

• DatagramConnection 인터페이스

- UDP/IP 통신을 위해서 데이터그램 종단을 표현하기 위한 연결형 Connection 을 생성

• InputConnection 인터페이스

- 데이터를 읽어 들일 수 있는 장치를 지정하는 인터페이스

Page 11: 6 장 . GCF  (Generic Connection Framework)

11

GCF API 설명 (2)

• OutputConnection 인터페이스 - 데이터를 전송할 수 있는 장치를 지정하는 인터페이스

• StreamConnection 인터페이스 - InputConnection 과 OutputConnection 을 통합하기 위한 인터페이스

• ContentConnection 인터페이스 - HTTP 연결에 의한 기본적인 메타 데이터 정보에 대한 접근을 제공

• Connection 인터페이스 - ContentConnection 을 상속하였으며 , HTTP1.1 을 지원하기 위해 사용

• Connector 클래스 - GCF 에서 유일한 클래스이며 , open() 메소드의 파라미터로 부터 요청 한 Connection 을 형성하여 돌려 준다 .

Page 12: 6 장 . GCF  (Generic Connection Framework)

12

MIDP HTTPConnection 프로그래밍

• HttpConnection 인터페이스를 사용 했을 때 장단점

- J2ME CLDC/MIDP 를 구현한 디바이스에서 HTTP Connection 의 지원은 필수이며 , Socket, UDP 등 기타 Connection 의 구현은 선택 사항이다 . 이식성이 우수

- HTTP Connection 을 사용하면 방화벽에서 일반적으로 열어 두는 80 포트 를 사용하기 때문에 네트워크 보안이나 방화벽 문제를 쉽게 처리 가능

- HTTP Connection 의 Request 에 XML 의 데이터를 보내게 되면 다른 형태 의 데이터를 손쉽게 전송

- J2ME CLDC/MIDP 는 HTTP 1.1 프로토콜의 서브 셋을 지원

- HTTP 프로토콜이 연결 지속성이 아니라서 Session 관리를 위해서 별도의 노력을 기울여야 하는 단점

Page 13: 6 장 . GCF  (Generic Connection Framework)

13

HTTP GET 방식 데이터 요청 예제 (1)

• GET 방식은 가장 많이 사용하는 방식으로 웹 서버에서 정보를 받기 위한 요청

• URL 형식

- http://127.0.0.1/midp/servlet/MyServlet?name=scott&num=10

• 구성

Servlet MIDlet

HttpGetServlet HttpGetMIDlet

Get 방식 요청ID, PassWord

로그인 결과

Page 14: 6 장 . GCF  (Generic Connection Framework)

14

HTTP GET 방식 데이터 요청 예제 (2)

• HttpGetServlet 을 생성하고 GET 방식으로 요청을 설정하는 부분

hc = (HttpConnection)Connector.open(url + queryString);

hc.setRequestMethod(HttpConnection.GET);

• getParameter() 메소드를 이용해 GET 방식 요청

// request 로 부터 ID, PASSWORD 를 얻어옴

id = request.getParameter("id");

password = request.getParameter("password");

Page 15: 6 장 . GCF  (Generic Connection Framework)

15

HTTP GET 방식 데이터 요청 예제 (3)

• GET 요청을 위해 QueryString 을 생성

// GET 요청을 위해 queryString 을 생성

queryString = "?" + "id=" + idField.getString() + "&" + "password=" + pwField.getString();

• HttpConnection 을 생성

// HTTP Connection 을 생성

hc = (HttpConnection)Connector.open(url + queryString);

• RequestMethod 로 GET 설정

// RequestMethod 로 GET 설정

hc.setRequestMethod(HttpConnection.GET);

Page 16: 6 장 . GCF  (Generic Connection Framework)

16

HTTP GET 방식 데이터 요청 예제 (4)

• HttpGetMIDlet 실행 화면

Page 17: 6 장 . GCF  (Generic Connection Framework)

17

HTTP POST 방식 데이터 요청 예제 (1)

• GET 방식이 서버로부터 데이터를 받기 위한 목적으로 사용하는 것이라면 POST 방식은 그 반대의 기능을 제공 • GET 방식 요청이 허용하는 것 보다 많은 정보를 전달하기 위해 사용됨 .

• HttpConnection 을 생성하고 POST 방식 요청을 설정하는 부분

hc = (HttpConnection)Connector.open(url, Connector.READ_WRITE);

hc.setRequestMethod(HttpConnection.POST);

Servlet 은 클라이언트로부터 POST 방식 요청으로 UpperCase 할 데이터를 받은 후 결과를 클라이언트에 보낸다 .

사용자로부터 UpperCase 할 데이터를 받은 후 Server 에 Http ConnEction 의 POST 방식 요청을 보내고 결과를 받아 출력한다 .

Servlet 예제 MIDlet 예제

Page 18: 6 장 . GCF  (Generic Connection Framework)

18

HTTP POST 방식 데이터 요청 예제 (2)

• InputStream 을 통해 데이터를 받음 (Servlet)

// InputStream 생성 BufferedReader inputStream = request.getReader();

// Input String 을 받음 String line;

String requeststring = "";

while (( line = inputStream.readLine()) != null) { requeststring = requeststring + line;

• HttpConnection 을 생성 (MIDlet)

// HTTP Connection 을 생성

hc = (HttpConnection)Connector.open(url, Connector.READ_WRITE);

Page 19: 6 장 . GCF  (Generic Connection Framework)

19

HTTP POST 방식 데이터 요청 예제 (3)

• RequestMethod 로 POST 생성 (MIDlet)

// RequestMethod 로 POST 설정

hc.setRequestMethod(HttpConnection.POST);

• OutputStream 을 통해 데이터를 전달 (MIDlet)

// 서버로 부터 데이타를 받기 위해 outputStream 생성

out = hc.openDataOutputStream();

// 서버에 요청 스트링을 보낸다 .

byte[] request = requeststring.getBytes();

for (int i = 0; i < request.length; i++){ out.writeByte(request[i]);}out.flush();

Page 20: 6 장 . GCF  (Generic Connection Framework)

20

HTTP POST 방식 데이터 요청 예제 (4)

• HttpPostMIDlet 실행 화면

Page 21: 6 장 . GCF  (Generic Connection Framework)

21

HTTP HEAD 방식 데이터 요청 예제

• GET 방식과 유사• 서버는 HEAD 에 대한 정보만 돌려 보낸다 .

• HEAD 정보 HTTP/1.0 200 OK Data: Thu, 03 May 2002 16:04:09 GMT Server: NCSA/1.4.2 MIME-version: 1.0 Content-type: text/html Last-modified: Thu, 03 May 2002 16:03:27 GMT Content-length: 145

• HEAD 는 다음의 정보 확인을 위해 사용Server 문서의 최근 modified 날짜 다운 받을 문서의 크기 – 다운 로드 진행 상태를 알 수 있다 .Server Type – Server 에 따른 Client 처리문서 형식 – 클라이언트의 문서 지원 여부 확인

Page 22: 6 장 . GCF  (Generic Connection Framework)

22

MIDP HTTPConnection 상태 유지 (1)

• 접속 상태를 유지하지 않는 프로토콜

• 한쌍의 Request – Reponse 는 독립적으로 처리

Cookie 이란 ?

Cookie 는 클라이언트가 저장이 필요한 정보가 생길 때 마다 클라이언트 쪽에 일정한 형식의 데이터 (Cookie) 로 만들어 저장하고 필요한 서버와 서버의 디렉터리를 접근할 때 그 정보도 같이 서버에 보내주는 형태

Session 이란 ?

Session 은 사용자의 정보를 유지 하기 위해 서버에 저장되는 Cookie 라고 생각하면 된다

Page 23: 6 장 . GCF  (Generic Connection Framework)

23

MIDP HTTPConnection 상태 유지 (2)

• Cookie 값

HTTP/1.1 200 OKContent-Type: text/plainContent-Length: 53Date: Tue, 18 Dec 2001 17:19:22 GMTServer: Apache Tomcat/4.0.1 (HTTP/1.1 Connector)

Set-Cookie: JSESSIONID=35E2621570C3B1D;Path=/midp

서버가 클라이언트의 접속에 대해 생성한 유일한 식별자

Page 24: 6 장 . GCF  (Generic Connection Framework)

24

MIDP HTTPConnection 상태 유지 (3)

• 유일한 식별자인 JSESSIONID 을 Cookie 로 설정해 서버에 보낸다 .

hc.setRequestProperty("Cookie", sessionID);

• 서버의 응답으로부터 Cookie 를 얻는다 .

String cookie = hc.getHeaderField("Set-Cookie");

• Cookie 중에 유일한 식별자인 JSESSIONID 을 얻는다 .

// cookie 에서 JSESSIONID 를 얻는다 . if (cookie != null) { int index = cookie.indexOf(';');

sessionID = cookie.substring(0, index); }

Page 25: 6 장 . GCF  (Generic Connection Framework)

25

MIDP HTTPConnection 상태 유지 (4)

• SessionMIDlet 실행 화면

Page 26: 6 장 . GCF  (Generic Connection Framework)

26

MIDP StreamConnection 프로그래밍

• StreamConnection 인터페이스는 연결 지향형 Connection 을 지원 .

• 한번 접속하면 접속 종료 전까지 계속적으로 데이터를 주고 받음 .

• TCP/IP

• Daemon - 시스템의 특정 포트를 열고 Background 에서 실행되는 프로세스

• StreamConnecton 을 생성하기 위해 Connector 의 open() 메소드 이용

- StreamConnection sc =(StreamConnection) Connector.open("socket://java.sun.com:1500 " )

Page 27: 6 장 . GCF  (Generic Connection Framework)

27

StreamConnection 예제 (1)

• StreamConnectionServer 작업 흐름도 ServerSocket 을 열고 클라이언트의 접속 대기

InputStream 을 이용해 클라이언트에서 온 데이터를 받음

OutputStream 을 이용해 데이터를 클라이언트로 보냄

클라이언트 접속 접속 대기

Page 28: 6 장 . GCF  (Generic Connection Framework)

28

StreamConnection 예제 (2)

• Server Socket 생성// Server Socket 생성server = new ServerSocket(port);

• Client 접속을 기다림System.out.println(" 클라이언트가 접속 하였습니다 .");

• OutputStream 을 생성하고 데이터를 보냄out = new DataOutputStream(client.getOutputStream());// Client 에 결과 메세지를 보냄out.writeUTF(output);out.flush();

• InputStream 을 생성하고 데이터를 받음in = new DataInputStream(client.getInputStream());// Client 로 부터 메세지를 받음String input = in.readUTF();// Output 메세지 (Reverse String) 생성

Page 29: 6 장 . GCF  (Generic Connection Framework)

29

StreamConnection 예제 (3)

• StreamConnectionMIDlet 작업 흐름도

StreamConnection 을 생성

InputStream 을 이용해 서버에 데이터 전송

OutputStream 을 이용해 데이터를 받아 출력

Page 30: 6 장 . GCF  (Generic Connection Framework)

30

StreamConnection 예제 (4)

• StreamConnection 생성// Server 와 StreamConnection(Socket) 을 생성sc = (StreamConnection) Connector.open (url, Connector.READ_WRITE, true);

• OutputStream 생성 후 데이터를 보냄

// Server 에 reverse 할 String 을 보냄out = sc.openDataOutputStream();out.writeUTF(reverseString);out.flush();

• InputStream 생성 후 데이터를 받음

// InputStream 생성in = sc.openDataInputStream();// Server 로 부터 reverse 된 String 을 받아 화면에 출력 .String input = in.readUTF();

Page 31: 6 장 . GCF  (Generic Connection Framework)

31

StreamConnection 예제 (5)

• StreamConnectionMIDlet 실행 화면

Page 32: 6 장 . GCF  (Generic Connection Framework)

32

MIDP DatagramConnection 프로그래밍

• Connector 클래스의 open 메소드를 사용

- (DatagramConnection) Connector.open ( " datagram:// java.sun.com:1500" )

• 서버 모드의 DatagramConnection 의 생성

- DatagramConnection dc = (DatagramConnection) Connector.open ( " datagram://:port " )

- DatagramConnection dc = (DatagramConnection) Connector.open ( " datagram://localhost:port " )

• UDP (User Datagram Protocol)

- IP 를 사용하는 네트웍 내에서 컴퓨터들 간에 메시지들이 교환될 때 제한된 서비스만을 제공하는 통신 프로토콜이다 . UDP 는 TCP 의 대안

- TCP 와 마찬가지로 UDP 도 한 컴퓨터에서 다른 컴퓨터로 데이터그램이라 고 불리는 실제 데이터 단위를 받기 위해 IP 를 사용

Page 33: 6 장 . GCF  (Generic Connection Framework)

33

DatagramConnection 예제 (1)

• DatagramConnectionServer

- 클라이언트와 Datagram Connection 을 유지하고 받은 데이터를 Reverse String 으로 변환한 결과를 클라이언트로 보냄

1. DatagramSocket 을 서버모드로 생성

// receive DatagramSocket 생성

recei = new DatagramSocket(port);

2. 클라이언트로부터 데이터를 받기 위해 DatagramPacket 을 생성하고 데이

터를 기다림

rPacket = new DatagramPacket( buffer, buffer.length );

recei.receive(rPacket);

Page 34: 6 장 . GCF  (Generic Connection Framework)

34

DatagramConnection 예제 (2)

3. 클라이언에 보낼 DatagramPacket 을 생성

// Client 에 보낼 DatagramPacket 생성

int sPort = rPacket.getPort();

InetAddress sAddress = rPacket.getAddress();

sPacket = new DatagramPacket( out, out.length, sAddress, sPort );

4. 클라이언트에 데이터를 보냄

// 결과 DatagramPacket 을 Client 에 보냄

send = new DatagramSocket();

send.send( sPacket );

Page 35: 6 장 . GCF  (Generic Connection Framework)

35

DatagramConnection 예제 (3)

• DatagramConnectionMIDlet

1. Server 에 보낼 Datagram 을 생성 후 데이터를 보냄

// DatagramConnection 을 생성dc = (DatagramConnection)Connector.open(sendUrl);

// Server 에 보낼 Datagram 생성dgram = dc.newDatagram( reverseString.getBytes(), reverseString.getBytes().length, sendUrl);

// Server 에 Datagram 을 보냄dc.send(dgram);

2. Server 로부터 받을 Datagram 을 생성 후 Server 로부터 데이터를 받음 // Server 로 부터 받을 Datagram 생성dgram = dc.newDatagram(128);

dc.receive(dgram);

Page 36: 6 장 . GCF  (Generic Connection Framework)

36

MIDP DatagramConnection 프로그래밍 (4)

• DatagramConnectionMIDlet 실행 화면