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.
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
07 Połączenie z internetem przy użyciu aplikacji J2ME
1. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Połączenie z internetem przy użyciu aplikacji J2ME
Krzysztof Zawadzki
mackz@o2.pl
Politechnika Wrocławska
Studenckie Koło Naukowe Informatyki Systemów Autonomicznych
i Adaptacyjnych ISA2
10 grudnia 2009
Krzysztof Zawadzki Połączenie z internetem 1/30
2. 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
3. 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
4. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Wstęp
CLDC 1.0
Powstaje abstrakcyjna platforma GCF (Generic Connection
Framework) ma za zadanie obsłużyć I/O zarówno dla plików jak i
połą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, UDP
datagramów, obsługę połączeń szyfrowanych oraz
możliwość zdalnego uruchomienia Midletu
(PushRegistry)
Krzysztof Zawadzki Połączenie z internetem 4/30
5. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Wstęp
CLDC 1.0
Powstaje abstrakcyjna platforma GCF (Generic Connection
Framework) ma za zadanie obsłużyć I/O zarówno dla plików jak i
połą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, UDP
datagramów, obsługę połączeń szyfrowanych oraz
możliwość zdalnego uruchomienia Midletu
(PushRegistry)
Krzysztof Zawadzki Połączenie z internetem 4/30
6. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Wstęp
CLDC 1.0
Powstaje abstrakcyjna platforma GCF (Generic Connection
Framework) ma za zadanie obsłużyć I/O zarówno dla plików jak i
połą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, UDP
datagramów, obsługę połączeń szyfrowanych oraz
możliwość zdalnego uruchomienia Midletu
(PushRegistry)
Krzysztof Zawadzki Połączenie z internetem 4/30
7. 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ęki
któremu użytkownicy telefonów komórkowych wyposażonych w
przeglądarkę WAP, mają dostęp do zasobów sieciowych,
opracowany w 1998 roku.
Krzysztof Zawadzki Połączenie z internetem 5/30
8. 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
9. 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
10. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Strumienie I/O
Interfejsy strumieni:
1 DataInputStream openDataInputStream()
2 DataOutputStream openDataOutputStream()
3
4 InputStream openInputStream()
5 OutputStream openOutputStream()
Krzysztof Zawadzki Połączenie z internetem 8/30
11. 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ów
5 }
Przykład:
http://localhost:8080 lub datagram://localhost:9001
Krzysztof Zawadzki Połączenie z internetem 9/30
12. 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
13. 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
14. 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życia
protokołu IP np (WAP)
Krzysztof Zawadzki Połączenie z internetem 12/30
15. 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
16. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
protokół HTTP
GET - parametry/zmienne przesyłane w URL, w odpowiedzi
nagłówek i treść
HEAD - parametry/zmienne przesyłane w URL, w odpowiedzi
tylko nagłówek
POST - 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 %xy
gdzie xy to liczba szesnastkowa reprezentujacą 8
niższych bitów danego znaku.
Krzysztof Zawadzki Połączenie z internetem 14/30
17. 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;
4
5 // nawiązujemy połączenie na podany adres url
6 hc = (HttpConnection)Connector.open(url);
7
8 // odbieramy odpowiedź
9 in = hc.openInputStream();
10
11 int length = 1024;
12 byte[] raw = new byte[length];
13 int readLength = in.read(raw);
14
15 String message = new String(raw, 0, readLength);
Krzysztof Zawadzki Połączenie z internetem 15/30
18. 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 InputStream
5 ic.close();
Krzysztof Zawadzki Połączenie z internetem 16/30
19. 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);
5
6 //ustawianie naszego połączenia
7 hc.setRequestMethod(HttpConnection.POST);
8 hc.setRequestProperty(’’Content-Type’’,’’application/x-www-form-urlencoded’’);
9 hc.setRequestProperty(’’Content-Length’’,Integer.toString(message.length()));
10
11 //nawiązanie połączenia
12 out = hc.openOutputStream();
13 out.write(message.getBytes());
Krzysztof Zawadzki Połączenie z internetem 17/30
20. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Cookies
CookieMidlet.java
1 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
21. 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
22. 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
23. 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
24. 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 Datagramu
4 dc.newDatagram(rozmiar bufora,adrres docelowy);
5 // wysyła Datagram do celu
6 dc.send(sendDatagram);
7 // czeka na Datagram aż serwer nie odpowie
8 dc.receive(receiveDatagram);
Ważne:
Nie ma pewności czy wysłany pakiet datagramu
dotrze bądź przyjdzie w odpowiedniej kolejności.
Należy uważać na rozmiary pakietów ! Gdyż
nagłówek Datagramu przy małym rozmiarze
powoduje przeciążenia.
Krzysztof Zawadzki Połączenie z internetem 22/30
25. 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
26. 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);
4
5 InputStream is = sc.openInputStream();
6 OutputStream os = sc.openOutputStream();
7
8 os.write(’’ r n’’.getBytes());
9 int ch = 0;
10 while(ch != -1) {
11 ch = is.read();
12 }
13
14 is.close();
15 os.close();
16 sc.close();
Krzysztof Zawadzki Połączenie z internetem 24/30
27. 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 z
oczekują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
28. 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 klientem
7 }
Krzysztof Zawadzki Połączenie z internetem 26/30
29. 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
30. 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łopotu
z obsługą nagłówka połączenia.
2 Nie wpisuj adresów URL w aplikację. Ustaw właściwość dla
adresu w deskryptorze Midletu.
3 Utwóz osobny wątek dla połączenia z internetem. Połączenie
z interenetem zabiera pewien odcinek czasu; w ten sposób nie
zawieszamy interfejsu. Dobrze jest powiadomić użytkownika o
tym ż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żywaj
finally
Krzysztof Zawadzki Połączenie z internetem 28/30
31. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Podsumowanie
?? PYTANIA ??
Krzysztof Zawadzki Połączenie z internetem 29/30
32. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Więcej informacji
Kontakt z autorem:
mackz@o2.pl
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