1 / 36

6 장 . GCF (Generic Connection Framework)

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 의 입출력과 네트워크의 라이브러리를 사용하기에는

Télécharger la présentation

6 장 . GCF (Generic Connection Framework)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 6장. GCF (Generic Connection Framework)

  2. Introduction 1. GCF 소개 2. MIDP HTTPConnection 프로그래밍 3. MIDP HTTPConnection 상태 유지 4. MIDP StreamConnection 프로그래밍 5. MIDP DatagramConnection 프로그래밍

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

  4. GCF 소개 (2) • J2SE, J2EE 플랫폼의 java.io, java.net 패키지를 사용할 수 없음. • GCF 개념 • - 가능한 넓은 범위의 휴대 장치를 지원하기 위해 입출력과 네트워크 • 를 추상화하고, 실제 구현은 각 장치 제조업체가 하도록 설계 • GCF 설계 목적 • - 서로 다른 형태의 입출력 형태를 일관성있게 지원 • - 서로 다른 형태의 프로토콜을 일관성있게 지원 • - 어플리케이션 이식성 향상 • - 표준 자바 클래스 라이브러리와 상위 호환 • - 더 작은 메모리 풋프린트를 가짐

  5. GCF 소개 (3) • GCF 구조도

  6. MIDP Connection 생성 (1) • connection은 일관성을 유지하기 위해 Connector class의 open • 메소드 하나를 사용하여 모든 Connection을 생성 • open 메소드 정의 • - static Connection open (String name)

  7. MIDP Connection 생성 (2) • J2ME CLDC/MIDP에서 Connection을 생성하고 데이터를 주고 받는 절차 open() 메소드를 이용해 Connection을 연다. Connection을 이용해 InputStream 또는 OutputStream을 만든다. 데이터를 송신하거나 수신한다. Connection과 Input/Output Stream을 반드시 닫는다.

  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();

  9. MIDP Connection 생성 (4) 3. 데이터 송/수신 dis.readChar() ; dos.writeChar(); 4. Connection과 Input/Output Stream 닫기 c.close(); dis.close(); dos.close();

  10. GCF API 설명 (1) • Connection 인터페이스 • - GCF에서 가장 기본이 되는 최상위 인터페이스로서 단지 열리고 • 닫는 기능만 한다. • StreamConnectionNotifier 인터페이스 • - 연결이 설정될 때까지 기다리기 위해 사용되는 연결형 Connection • DatagramConnection 인터페이스 • - UDP/IP 통신을 위해서 데이터그램 종단을 표현하기 위한 연결형 • Connection 을 생성 • InputConnection 인터페이스 • - 데이터를 읽어 들일 수 있는 장치를 지정하는 인터페이스

  11. GCF API 설명 (2) • OutputConnection 인터페이스 • - 데이터를 전송할 수 있는 장치를 지정하는 인터페이스 • StreamConnection 인터페이스 • - InputConnection과 OutputConnection을 통합하기 위한 인터페이스 • ContentConnection인터페이스 • - HTTP 연결에 의한 기본적인 메타 데이터 정보에 대한 접근을 제공 • Connection 인터페이스 • - ContentConnection을 상속하였으며, HTTP1.1을 지원하기 위해 사용 • Connector 클래스 • - GCF에서 유일한 클래스이며, open() 메소드의 파라미터로 부터 요청 • 한 Connection을 형성하여 돌려 준다.

  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관리를 위해서 별도의 • 노력을 기울여야 하는 단점

  13. Get 방식 요청 ID, PassWord HttpGetServlet HttpGetMIDlet 로그인 결과 HTTP GET 방식 데이터 요청 예제 (1) • GET 방식은 가장 많이 사용하는 방식으로 웹 서버에서 정보를 받기 위한 • 요청 • URL 형식 • - http://127.0.0.1/midp/servlet/MyServlet?name=scott&num=10 • 구성 Servlet MIDlet

  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");

  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);

  16. HTTP GET 방식 데이터 요청 예제 (4) • HttpGetMIDlet 실행 화면

  17. HTTP POST 방식 데이터 요청 예제 (1) • GET 방식이 서버로부터 데이터를 받기 위한 목적으로 사용하는 것이라면 • POST 방식은 그 반대의 기능을 제공 • GET 방식 요청이 허용하는 것 보다 많은 정보를 전달하기 위해 사용됨. • HttpConnection을 생성하고 POST 방식 요청을 설정하는 부분 hc = (HttpConnection)Connector.open(url, Connector.READ_WRITE); hc.setRequestMethod(HttpConnection.POST); Servlet 예제 MIDlet 예제 Servlet은 클라이언트로부터 POST 방식 요청으로 UpperCase할 데이 터를 받은 후 결과를 클라이언트에 보낸다. 사용자로부터 UpperCase할 데이 터를 받은 후 Server에 Http Conn Ection의 POST 방식 요청을 보내 고 결과를 받아 출력한다.

  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);

  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();

  20. HTTP POST 방식 데이터 요청 예제 (4) • HttpPostMIDlet 실행 화면

  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 처리 문서 형식 – 클라이언트의 문서 지원 여부 확인

  22. MIDP HTTPConnection 상태 유지 (1) • 접속 상태를 유지하지 않는 프로토콜 • 한쌍의 Request – Reponse는 독립적으로 처리 Cookie 이란? Cookie는 클라이언트가 저장이 필요한 정보가 생길 때 마다 클라이언트 쪽에 일정한 형식의 데이터(Cookie)로 만들어 저장하고 필요한 서버와 서버의 디렉터리를 접근할 때 그 정보도 같이 서버에 보내주는 형태 Session이란? Session은 사용자의 정보를 유지 하기 위해 서버에 저장되는 Cookie라고 생각하면 된다

  23. MIDP HTTPConnection 상태 유지 (2) • Cookie 값 HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 53 Date: Tue, 18 Dec 2001 17:19:22 GMT Server: Apache Tomcat/4.0.1 (HTTP/1.1 Connector) Set-Cookie: JSESSIONID=35E2621570C3B1D;Path=/midp 서버가 클라이언트의 접속에 대해 생성한 유일한 식별자

  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); }

  25. MIDP HTTPConnection 상태 유지 (4) • SessionMIDlet 실행 화면

  26. MIDP StreamConnection 프로그래밍 • StreamConnection 인터페이스는 연결 지향형 Connection을 지원. • 한번 접속하면 접속 종료 전까지 계속적으로 데이터를 주고 받음. • TCP/IP • Daemon • - 시스템의 특정 포트를 열고 Background에서 실행되는 프로세스 • StreamConnecton을 생성하기 위해 Connector의 open() 메소드 이용 • - StreamConnection sc =(StreamConnection) • Connector.open("socket://java.sun.com:1500 " )

  27. ServerSocket을 열고 클라이언트의 접속 대기 클라이언트 접속 접속 대기 InputStream을 이용해 클라이언트에서 온 데이터를 받음 OutputStream을 이용해 데이터를 클라이언트로 보냄 StreamConnection 예제 (1) • StreamConnectionServer 작업 흐름도

  28. StreamConnection 예제 (2) • Server Socket 생성 // Server Socket 생성 server = new ServerSocket(port); • Client 접속을 기다림 System.out.println("클라이언트가 접속 하였습니다."); • InputStream을 생성하고 데이터를 받음 in = new DataInputStream(client.getInputStream()); // Client로 부터 메세지를 받음 String input = in.readUTF(); // Output 메세지(Reverse String) 생성 • OutputStream을 생성하고 데이터를 보냄 out = new DataOutputStream(client.getOutputStream()); // Client에 결과 메세지를 보냄 out.writeUTF(output); out.flush();

  29. StreamConnection을 생성 InputStream을 이용해 서버에 데이터 전송 OutputStream을 이용해 데이터를 받아 출력 StreamConnection 예제 (3) • StreamConnectionMIDlet 작업 흐름도

  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();

  31. StreamConnection 예제 (5) • StreamConnectionMIDlet 실행 화면

  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를 사용

  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);

  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 );

  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);

  36. MIDP DatagramConnection 프로그래밍 (4) • DatagramConnectionMIDlet 실행 화면

More Related