07 Połączenie z internetem przy użyciu aplikacji J2ME

32
Studenkie Kolo Naukowe ISA 2 Warsztaty programistyczne J2ME 10 grudnia 2009 Polączenie z internetem przy użyciu aplikacji J2ME Krzysztof Zawadzki [email protected] Politechnika Wroclawska Studenckie Kolo Naukowe Informatyki Systemów Autonomicznych i Adaptacyjnych ISA 2 10 grudnia 2009 Krzysztof Zawadzki Polączenie z internetem 1/30

description

Prezentacja wprowadzająca do łączenia się telefonu z internetem w j2me. Przygotowana i wygłoszona przez Krzysztofa Zawadzkiego 10.10.2009.Prezentacja wygłoszona w ramach Warsztatów programowania telefonów komórkowych w j2me przy Studenckim Kole Naukowym Informatyki Systemów Autonomicznych i Adaptacyjnych ISA^2.

Transcript of 07 Połączenie z internetem przy użyciu aplikacji J2ME

Page 1: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Połączenie z internetem przy użyciu aplikacji J2ME

Krzysztof [email protected]

Politechnika WrocławskaStudenckie Koło Naukowe Informatyki Systemów Autonomicznych

i Adaptacyjnych ISA2

10 grudnia 2009

Krzysztof Zawadzki Połączenie z internetem 1/30

Page 2: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Plan prezentacji

1 Wstęp

2 HTTP

3 HTTPS

4 Datagram

5 Socket

6 Podsumowanie

Krzysztof Zawadzki Połączenie z internetem 2/30

Page 3: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Plan prezentacji

1 Wstęp

2 HTTP

3 HTTPS

4 Datagram

5 Socket

6 Podsumowanie

Krzysztof Zawadzki Połączenie z internetem 3/30

Page 4: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Wstęp

CLDC 1.0

Powstaje abstrakcyjna platforma GCF (Generic ConnectionFramework) ma za zadanie obsłużyć I/O zarówno dla plików jak ipołączenia z internetem.

MIDP 1.0

Wymusza obsługę protokołu HTTP 1.1

MIDP 2.0

MIDP 2.0 wprowadza obsługę socketów, UDPdatagramów, obsługę połączeń szyfrowanych orazmożliwość zdalnego uruchomienia Midletu(PushRegistry)

Krzysztof Zawadzki Połączenie z internetem 4/30

Page 5: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Wstęp

CLDC 1.0

Powstaje abstrakcyjna platforma GCF (Generic ConnectionFramework) ma za zadanie obsłużyć I/O zarówno dla plików jak ipołączenia z internetem.

MIDP 1.0

Wymusza obsługę protokołu HTTP 1.1

MIDP 2.0

MIDP 2.0 wprowadza obsługę socketów, UDPdatagramów, obsługę połączeń szyfrowanych orazmożliwość zdalnego uruchomienia Midletu(PushRegistry)

Krzysztof Zawadzki Połączenie z internetem 4/30

Page 6: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Wstęp

CLDC 1.0

Powstaje abstrakcyjna platforma GCF (Generic ConnectionFramework) ma za zadanie obsłużyć I/O zarówno dla plików jak ipołączenia z internetem.

MIDP 1.0

Wymusza obsługę protokołu HTTP 1.1

MIDP 2.0

MIDP 2.0 wprowadza obsługę socketów, UDPdatagramów, obsługę połączeń szyfrowanych orazmożliwość zdalnego uruchomienia Midletu(PushRegistry)

Krzysztof Zawadzki Połączenie z internetem 4/30

Page 7: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

WAP

http://www.javaworld.com/javaworld/jw-06-2000/jw-0602-wap.html?page=2

Wireless Aplication Protocol (WAP)- jest to standard, dziękiktóremu użytkownicy telefonów komórkowych wyposażonych wprzeglądarkę WAP, mają dostęp do zasobów sieciowych,opracowany w 1998 roku.

Krzysztof Zawadzki Połączenie z internetem 5/30

Page 8: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Połączenia

http://www.gfader.com/da/texte/Features.htm

Więcej informacji pod adresem:

http://www.protocols.com/pbook/wap.htm

Krzysztof Zawadzki Połączenie z internetem 6/30

Page 9: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

GCF

http://developers.sun.com/mobility/midp/articles/midp2network/

Krzysztof Zawadzki Połączenie z internetem 7/30

Page 10: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Strumienie I/O

Interfejsy strumieni:

1 DataInputStream openDataInputStream()2 DataOutputStream openDataOutputStream()34 InputStream openInputStream()5 OutputStream openOutputStream()

Krzysztof Zawadzki Połączenie z internetem 8/30

Page 11: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

GCF cd..

1 try {2 Connector.open(’’protokół:adres;parametery’’);3 } catch (ConnectionNotFoundExeption e) {4 // brak obsługi wyjątków dla socketów5 }

Przykład:

http://localhost:8080 lub datagram://localhost:9001

Krzysztof Zawadzki Połączenie z internetem 9/30

Page 12: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Connector.open()

połączenie HTTP:

Connection hc =Connector.open(”http://www.wirelessdevnet.com”);

Strumieniowe połączenie na sockecie:

Connection sc = Connector.open(”socket://localhost:9000”);

Połączenie na datagramie:

Connection dc = Connector.open(”datagram://:9000”);

We/Wy plików:

Connection fc = Connector.open(”file://foo.dat”);

Krzysztof Zawadzki Połączenie z internetem 10/30

Page 13: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Plan prezentacji

1 Wstęp

2 HTTP

3 HTTPS

4 Datagram

5 Socket

6 Podsumowanie

Krzysztof Zawadzki Połączenie z internetem 11/30

Page 14: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

HTTP informacje

http://www.javaworld.com/javaworld/jw-06-2000/jw-0602-wap.html

Informacja:

HTTP może być zaimplementowane z użyciem protokołu IP jak np (TCP/IP) bądź bez użyciaprotokołu IP np (WAP)

Krzysztof Zawadzki Połączenie z internetem 12/30

Page 15: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

HTTP budowa

Request (żądanie) Response (odpowiedź)

Treść odpowiedzi:

Krzysztof Zawadzki Połączenie z internetem 13/30

Page 16: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

protokół HTTP

GET - parametry/zmienne przesyłane w URL, w odpowiedzinagłówek i treśćHEAD - parametry/zmienne przesyłane w URL, w odpowiedzitylko nagłówekPOST - parametry są przesyłane w ciele żądania

Informacja:

Przed wysłaniem danych POST i GET parametry sąkodowane według prostej reguły:1 Spacja jest zamieniana na znak plus ( + )2 Małe znaki oraz duże od ”a” do ”z”, cyfry od 0 do

9, ”.” kropka, ”-” kreska, ” * ” gwiazdka i ” ”podkreślnik pozostająa bez zmiany.

3 Wszystkie inne znaki są konwertowane na %xygdzie xy to liczba szesnastkowa reprezentujacą 8niższych bitów danego znaku.

Krzysztof Zawadzki Połączenie z internetem 14/30

Page 17: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

przykład HTTP

HTTPMidlet.java

1 String url = http://autonom.ict.pwr.wroc.pl/ mstachniuk/;2 HttpConnection hc = null;3 InputStream in = null;45 // nawiązujemy połączenie na podany adres url6 hc = (HttpConnection)Connector.open(url);78 // odbieramy odpowiedź9 in = hc.openInputStream();

1011 int length = 1024;12 byte[] raw = new byte[length];13 int readLength = in.read(raw);1415 String message = new String(raw, 0, readLength);

Krzysztof Zawadzki Połączenie z internetem 15/30

Page 18: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

HTTP GET

http://www.google.pl/search?q=J2ME&ie=utf-8&oe=utf-8&aq=t

Przykładowy kod:

1 String url = ’’http:/ /www.google.pl/search?q=J2ME&ie=utf-8&oe=utf-8&aq=t’’;2 InputConnection ic = (InputConnection)Connector.open(url);3 InputStream in = ic.openInputStream();4 // Odczyt danych z InputStream5 ic.close();

Krzysztof Zawadzki Połączenie z internetem 16/30

Page 19: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

HTTP POST

POSTMIDlet.java

1 HttpConnection hc = null;2 InputStream in = null;3 OutputStream out = null;4 hc = (HttpConnection)Connector.open(url);56 //ustawianie naszego połączenia7 hc.setRequestMethod(HttpConnection.POST);8 hc.setRequestProperty(’’Content-Type’’,’’application/x-www-form-urlencoded’’);9 hc.setRequestProperty(’’Content-Length’’,Integer.toString(message.length()));

1011 //nawiązanie połączenia12 out = hc.openOutputStream();13 out.write(message.getBytes());

Krzysztof Zawadzki Połączenie z internetem 17/30

Page 20: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Cookies

CookieMidlet.java1 HttpConnection hc = (HttpConnection)Connector.open(url);2 if (mSession != null){3 hc.setRequestProperty(’’cookie’’, mSession);4 }5 InputStream in = hc.openInputStream();6 String cookie = hc.getHeaderField(’’Set-cookie’’);7 if (cookie != null) {8 int semicolon = cookie.indexOf(’;’);9 mSession = cookie.substring(0, semicolon);

10 }

Krzysztof Zawadzki Połączenie z internetem 18/30

Page 21: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Plan prezentacji

1 Wstęp

2 HTTP

3 HTTPS

4 Datagram

5 Socket

6 Podsumowanie

Krzysztof Zawadzki Połączenie z internetem 19/30

Page 22: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

HTTPS

Przykład połączenia:

1 String url = https://www.cert.org/;2 HttpsConnection hc = (HttpsConnection)Connector.open(url);3 SecurityInfo si = hc.getSecurityInfo();4 Certificate c = si.getServerCertificate();5 String subject = c.getSubject();

Krzysztof Zawadzki Połączenie z internetem 20/30

Page 23: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Plan prezentacji

1 Wstęp

2 HTTP

3 HTTPS

4 Datagram

5 Socket

6 Podsumowanie

Krzysztof Zawadzki Połączenie z internetem 21/30

Page 24: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

UDP datagram

1 DatagramConnection dc = (DatagramConnection)2 Connector.open(’’datagram:/ /localhost:9000’’);3 // tworzenie nowego Datagramu4 dc.newDatagram(rozmiar bufora,adrres docelowy);5 // wysyła Datagram do celu6 dc.send(sendDatagram);7 // czeka na Datagram aż serwer nie odpowie8 dc.receive(receiveDatagram);

Ważne:

Nie ma pewności czy wysłany pakiet datagramudotrze bądź przyjdzie w odpowiedniej kolejności.

Należy uważać na rozmiary pakietów ! Gdyżnagłówek Datagramu przy małym rozmiarzepowoduje przeciążenia.

Krzysztof Zawadzki Połączenie z internetem 22/30

Page 25: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Plan prezentacji

1 Wstęp

2 HTTP

3 HTTPS

4 Datagram

5 Socket

6 Podsumowanie

Krzysztof Zawadzki Połączenie z internetem 23/30

Page 26: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Socket

Przykład połączenia:

1 SocketConnection sc = (SocketConnection)2 Connector.open(’’socket:/ /host.com:79’’);3 sc.setSocketOption(SocketConnection.LINGER, 5);45 InputStream is = sc.openInputStream();6 OutputStream os = sc.openOutputStream();78 os.write(’’\ r \ n’’.getBytes());9 int ch = 0;

10 while(ch != -1) {11 ch = is.read();12 }1314 is.close();15 os.close();16 sc.close();

Krzysztof Zawadzki Połączenie z internetem 24/30

Page 27: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Server Socket

SocketConnection.DELAY

Opcja ustwienia opóźnienia dla małego bufora.

SocketConnection.KEEPALIVE

Opcja utrzymania połączenia.

SocketConnection.LINGER

Opcja przetrzymania przed zakończeniem połączenia zoczekującymi danymi na wyjściu. Czas podajemy w sec.

SocketConnection.RCVBUF

Rozmiar bufora dla połączenia przychodzącego.

SocketConnection.SNDBUF

Rozmiar bufora dla połączenia wychodzącego.Krzysztof Zawadzki Połączenie z internetem 25/30

Page 28: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Server Socket

Przykład ustawienia Socketu serwera:

1 ServerSocketConnection ssc;2 ssc = (ServerSocketConnection)Connector.open(’’socket:/ /:9000’’);3 boolean works = true;4 while (works) {5 SocketConnection sc = (SocketConnection)ssc.acceptAndOpen();6 // Tutaj wstawiamy kod obsługi połączenia z klientem7 }

Krzysztof Zawadzki Połączenie z internetem 26/30

Page 29: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Plan prezentacji

1 Wstęp

2 HTTP

3 HTTPS

4 Datagram

5 Socket

6 Podsumowanie

Krzysztof Zawadzki Połączenie z internetem 27/30

Page 30: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Wskazówki

1 Używaj raczej GET niż POST. Jest prostszy, i nie ma kłopotuz obsługą nagłówka połączenia.

2 Nie wpisuj adresów URL w aplikację. Ustaw właściwość dlaadresu w deskryptorze Midletu.

3 Utwóz osobny wątek dla połączenia z internetem. Połączeniez interenetem zabiera pewien odcinek czasu; w ten sposób niezawieszamy interfejsu. Dobrze jest powiadomić użytkownika otym że coś się wykonuje.

4 Staraj się obsługiwać wyjątki. Połączenia nie zawsze działająbezproblemowo i trwale.

5 Sprzątaj po sobie, zamykaj wszystkie połączenia i używajfinally

Krzysztof Zawadzki Połączenie z internetem 28/30

Page 31: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Podsumowanie

?? PYTANIA ??

Krzysztof Zawadzki Połączenie z internetem 29/30

Page 32: 07 Połączenie z internetem przy użyciu aplikacji J2ME

Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009

Więcej informacji

Kontakt z autorem:[email protected]

Strona koła naukowego ISA2

http://autonom.ict.pwr.wroc.pl/

Strona warsztatów:http://autonom.ict.pwr.wroc.pl/∼mstachniuk

Adres tego dokumentu:http://autonom.ict.pwr.wroc.pl/∼mstachniuk/files/warsztaty2009/08-internet-2009.12.10.pdf

Javadoc dla J2ME:http://java.sun.com/javame/reference/apis/jsr118/

J2ME Low-Level Network Programming with MIDP 2.0:http://developers.sun.com/mobility/midp/articles/midp2network/

Basic Network Programming in J2ME MIDP:http://www.informit.com/articles/article.aspx?p=131116&seqNum=1

Protokół WAP:http://www.protocols.com/pbook/wap.htm

Beginning J2ME: From Novice to Professional

Krzysztof Zawadzki Połączenie z internetem 30/30