SlideShare a Scribd company logo
1 of 32
Download to read offline
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
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 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
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
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
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
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()
3
4   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ów
5   }


    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życia
  protokoł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 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
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
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
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
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
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 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
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);
 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
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
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
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ł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
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

More Related Content

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

PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PROIDEA
 
PLNOG 8: Krzysztof Konkowski - GigabitEthernetem routera agregacyjnego do nie...
PLNOG 8: Krzysztof Konkowski - GigabitEthernetem routera agregacyjnego do nie...PLNOG 8: Krzysztof Konkowski - GigabitEthernetem routera agregacyjnego do nie...
PLNOG 8: Krzysztof Konkowski - GigabitEthernetem routera agregacyjnego do nie...PROIDEA
 
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6PROIDEA
 
PLNOG 22 - Patryk Wojtachnio, Krzysztof Kania - Czy kontroler sieci bezprzewo...
PLNOG 22 - Patryk Wojtachnio, Krzysztof Kania - Czy kontroler sieci bezprzewo...PLNOG 22 - Patryk Wojtachnio, Krzysztof Kania - Czy kontroler sieci bezprzewo...
PLNOG 22 - Patryk Wojtachnio, Krzysztof Kania - Czy kontroler sieci bezprzewo...PROIDEA
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryXSolve
 
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiProgramowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiMikołaj Olszewski
 
PLNOG 5: Łukasz Bromirski - Wysoka dostępność w sieciach operatorskich
PLNOG 5: Łukasz Bromirski - Wysoka dostępność w sieciach operatorskich PLNOG 5: Łukasz Bromirski - Wysoka dostępność w sieciach operatorskich
PLNOG 5: Łukasz Bromirski - Wysoka dostępność w sieciach operatorskich PROIDEA
 
PLNOG 9: Robert Ślaski - JAK OD ZERA ZBUDOWANO SIEĆ OPERATORSKĄ - zapiski z d...
PLNOG 9: Robert Ślaski - JAK OD ZERA ZBUDOWANO SIEĆ OPERATORSKĄ - zapiski z d...PLNOG 9: Robert Ślaski - JAK OD ZERA ZBUDOWANO SIEĆ OPERATORSKĄ - zapiski z d...
PLNOG 9: Robert Ślaski - JAK OD ZERA ZBUDOWANO SIEĆ OPERATORSKĄ - zapiski z d...PROIDEA
 
Office 2013 community launch - exchange 2013 what's new
Office 2013 community launch - exchange 2013 what's newOffice 2013 community launch - exchange 2013 what's new
Office 2013 community launch - exchange 2013 what's newKonrad Sagala
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
 
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...PROIDEA
 
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykSecurity B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykGawel Mikolajczyk
 
PLNOG 6: Łukasz Bromirski - Protokoły warstwy 2 - Przegląd dostępnych opcji
PLNOG 6: Łukasz Bromirski - Protokoły warstwy 2 - Przegląd dostępnych opcji PLNOG 6: Łukasz Bromirski - Protokoły warstwy 2 - Przegląd dostępnych opcji
PLNOG 6: Łukasz Bromirski - Protokoły warstwy 2 - Przegląd dostępnych opcji PROIDEA
 
PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...
PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...
PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...PROIDEA
 

Similar to 07 Połączenie z internetem przy użyciu aplikacji J2ME (20)

PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
PLNOG 18 - Sebastian Pasternacki - Bezpieczeństwo sieci operatorskich oraz en...
 
Wprowadzenie do J2ME
Wprowadzenie do J2MEWprowadzenie do J2ME
Wprowadzenie do J2ME
 
PLNOG 8: Krzysztof Konkowski - GigabitEthernetem routera agregacyjnego do nie...
PLNOG 8: Krzysztof Konkowski - GigabitEthernetem routera agregacyjnego do nie...PLNOG 8: Krzysztof Konkowski - GigabitEthernetem routera agregacyjnego do nie...
PLNOG 8: Krzysztof Konkowski - GigabitEthernetem routera agregacyjnego do nie...
 
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6
 
Usługi sieci internet cz i 2014
Usługi sieci internet cz i   2014Usługi sieci internet cz i   2014
Usługi sieci internet cz i 2014
 
PLNOG 22 - Patryk Wojtachnio, Krzysztof Kania - Czy kontroler sieci bezprzewo...
PLNOG 22 - Patryk Wojtachnio, Krzysztof Kania - Czy kontroler sieci bezprzewo...PLNOG 22 - Patryk Wojtachnio, Krzysztof Kania - Czy kontroler sieci bezprzewo...
PLNOG 22 - Patryk Wojtachnio, Krzysztof Kania - Czy kontroler sieci bezprzewo...
 
Urządzenia intersieci tworzące Internet
Urządzenia intersieci tworzące InternetUrządzenia intersieci tworzące Internet
Urządzenia intersieci tworzące Internet
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous Delivery
 
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiProgramowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGi
 
PLNOG 5: Łukasz Bromirski - Wysoka dostępność w sieciach operatorskich
PLNOG 5: Łukasz Bromirski - Wysoka dostępność w sieciach operatorskich PLNOG 5: Łukasz Bromirski - Wysoka dostępność w sieciach operatorskich
PLNOG 5: Łukasz Bromirski - Wysoka dostępność w sieciach operatorskich
 
PLNOG 9: Robert Ślaski - JAK OD ZERA ZBUDOWANO SIEĆ OPERATORSKĄ - zapiski z d...
PLNOG 9: Robert Ślaski - JAK OD ZERA ZBUDOWANO SIEĆ OPERATORSKĄ - zapiski z d...PLNOG 9: Robert Ślaski - JAK OD ZERA ZBUDOWANO SIEĆ OPERATORSKĄ - zapiski z d...
PLNOG 9: Robert Ślaski - JAK OD ZERA ZBUDOWANO SIEĆ OPERATORSKĄ - zapiski z d...
 
Office 2013 community launch - exchange 2013 what's new
Office 2013 community launch - exchange 2013 what's newOffice 2013 community launch - exchange 2013 what's new
Office 2013 community launch - exchange 2013 what's new
 
Otwarta chmura Microsoft
Otwarta chmura MicrosoftOtwarta chmura Microsoft
Otwarta chmura Microsoft
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
 
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykSecurity B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
 
PLNOG 6: Łukasz Bromirski - Protokoły warstwy 2 - Przegląd dostępnych opcji
PLNOG 6: Łukasz Bromirski - Protokoły warstwy 2 - Przegląd dostępnych opcji PLNOG 6: Łukasz Bromirski - Protokoły warstwy 2 - Przegląd dostępnych opcji
PLNOG 6: Łukasz Bromirski - Protokoły warstwy 2 - Przegląd dostępnych opcji
 
PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...
PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...
PLNOG 18 - Łukasz Bromirski - CEF, NetFlow, NetFPGA, Superman, Eureka, fd.io,...
 

More from MarcinStachniuk

GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyGraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyMarcinStachniuk
 
Wroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaWroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaMarcinStachniuk
 
[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za małoMarcinStachniuk
 
GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoGraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoMarcinStachniuk
 
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedBruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedMarcinStachniuk
 
[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using ShipkitMarcinStachniuk
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedMarcinStachniuk
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąMarcinStachniuk
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychMarcinStachniuk
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oMarcinStachniuk
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseMarcinStachniuk
 
Zastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oZastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oMarcinStachniuk
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017MarcinStachniuk
 

More from MarcinStachniuk (20)

GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyGraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
 
Wroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaWroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in Java
 
[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało
 
GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoGraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za mało
 
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedBruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
 
[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.org
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologią
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danych
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4o
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object database
 
Zastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oZastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4o
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
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