Post on 29-Nov-2014
description
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Połączenie z internetem przy użyciu aplikacji J2ME
Krzysztof Zawadzkimackz@o2.pl
Politechnika WrocławskaStudenckie Koło Naukowe Informatyki Systemów Autonomicznych
i Adaptacyjnych ISA2
10 grudnia 2009
Krzysztof Zawadzki Połączenie z internetem 1/30
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 10 grudnia 2009
Podsumowanie
?? PYTANIA ??
Krzysztof Zawadzki Połączenie z internetem 29/30
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