Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSCI 7010 UGA March 23 rd, 2010.  BES/MDS  TCP/IP  BIS  WiFi  WAP 2.0  WAP 1.0.

Similar presentations


Presentation on theme: "CSCI 7010 UGA March 23 rd, 2010.  BES/MDS  TCP/IP  BIS  WiFi  WAP 2.0  WAP 1.0."— Presentation transcript:

1 CSCI 7010 UGA March 23 rd, 2010

2  BES/MDS  TCP/IP  BIS  WiFi  WAP 2.0  WAP 1.0

3  Blackberry Enterprise Server/Mobile Data System  used if the Blackberry device is owned by a company and is set up to run through their servers  lets the Blackberry device make a secure connection to corporate servers

4  Transmission Control Protocol/Internet Protocol  a “regular” internet connection  works with most devices

5  Blackberry Internet Service  for devices that aren’t under a BES  used to send email  Internet connections, but less secure than BES  but you need to be part of the Blackberry Alliance Program to use it

6  802.11 B/G and sometimes A  allows device to connect to network via a WiFi router  device user has to configure device to connect to the router  Pro: better speed, lower latency, no carrier data charges  Con: WiFi coverage less than wireless network coverage  can write app so that it looks for WiFi first and then falls back to BES or BIS

7  Wireless Access Protocol  connects through wireless carrier’s WAP gateway  no Blackberry-specific infrastructure  but user’s plan must support WAP 2.0 (most do)  don’t need to configure as with TCP/IP

8  older version of WAP  supported by all Blackberry devices  but doesn’t support secure connections as do other methods

9  What should you do?  If activated on a BES:  use BES/MDS  If not activated on a BES:  use WAP 2.0  fall back to TCP/IP  In either case, might want to check for WiFi

10  how the device maintains info about its configuration  records about optional applications  email account configuration  connection methods available on a device

11  open device Options  click Advanced Options  Service Book  Demo on the simulator

12  Two parts:  CID – defines the type of record  UID – a unique identifier  most connection methods have a record in the service book

13  javax.microedition.io.Connector  used it before to open files  can also use it to open network connections  Example:  HttpConnection connection = (HttpConnection) Connector.open(“http://www.cnn.com”);“http://www.cnn.com  or  HttpConnection connection = (HttpConnection) Connector.open(“http://www.apress.com”);

14 Connection_type connectionName= (Connection_type) Connector.open(URL); Connection_type is some subclass of Connection connectionName is a variable name that you choose URL takes the form scheme://host:port/path[optional parameters] Example URLs: file://myfile.html http://www.apress.com:80/book/catalog socket://www.apress.com:80 https://www.amazon.com/gp/flex/sign-in/select.html

15  Hypertext transfer protocol  protocol of the World Wide Web  connectionless  request-response

16  opens a connection to an http server  sends a request message  receives the response  displays result

17  listens for a connection from client  receives a request  delivers a response  closes the connection

18  initial line (different for request & response)  header lines (zero or more)  blank line  optional message body

19  METHOD path http_version  GET /path/to/file/index.html HTTP/1.0  METHOD:  GET – “Please send this resource”  POST – “Here are some details about it”  HEAD – “Just checking some info about it”  PATH:  the part of the URL after the host name

20  also know as “status line”  HTTP_version status_code reason_phrase  HTTP/1.0 200 OK  HTTP/1.1 404 Not Found  status codes:  100s – informational  200s – success of some kind  300s – redirect to another URL  400s – client error  500s – server error

21  Let’s run it from a web browser first...

22 package com.beginningblackberry.networking; import net.rim.device.api.ui.UiApplication; public class NetworkingApplication extends UiApplication { public NetworkingApplication() { NetworkingMainScreen scr = new NetworkingMainScreen(); pushScreen(scr); } public static void main(String[] args) { NetworkingApplication app = new NetworkingApplication(); app.enterEventDispatcher(); }

23 package com.beginningblackberry.networking; import net.rim.device.api.ui.container.MainScreen; public class NetworkingMainScreen extends MainScreen { private EditField urlField; private BitmapField imageOutputField; private RichTextField textOutputField;.... methods on following slides }

24 public NetworkingMainScreen() { setTitle("Networking"); urlField = new EditField("URL:", ""); textOutputField = new RichTextField(); imageOutputField = new BitmapField(); add(urlField);add(new SeparatorField()); postDataField = new EditField("Post data:", ""); add(postDataField);add(new SeparatorField()); add(new LabelField("Image retrieved:")); add(imageOutputField);add(new SeparatorField()); add(new LabelField("Text retrieved:")); add(textOutputField); }

25 protected void makeMenu(Menu menu, int instance) { super.makeMenu(menu, instance); menu.add(new MenuItem("Get", 10, 10) { public void run() {getURL();} } ); menu.add(new MenuItem("Post", 10, 10) { public void run() {postURL();} } ); menu.add(new MenuItem("Socket Get", 10, 10) { public void run() {socketGet();} } ); }

26 http://www.purpletech.com/talks/Threads.ppt More on multi-threading (if you’re interested): http://www.cs.uga.edu/~eileen/Concurrency_tutorials

27  You can learn about any component by looking at the API documentation. See: http://www.blackberry.com/developers/docs/4.1api/index.html to learn more about the MenuItem component

28 private void getURL() { HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField.getText(), "GET", this); dispatcher.start(); } ... creates a new thread for the network- related operation ... and starts it up

29 package com.beginningblackberry.networking; /* * Class to handle creating the request, sending it off, * and receiving the response */ public class HttpRequestDispatcher extends Thread { private String url; private String method; // GET or POST private NetworkingMainScreen screen; private byte[] postData;... }

30 public HttpRequestDispatcher(String url, String method, NetworkingMainScreen screen) { this.url = url; this.method = method; this.screen = screen; } public HttpRequestDispatcher(String url, String method,NetworkingMainScreen screen, byte[] postData) { this.url = url; this.method = method; this.screen = screen; this.postData = postData; }

31 public void run(){ try{ HttpConnection connection = (HttpConnection) Connector.open(url); int responseCode = connection.getResponseCode(); if (responseCode != HttpConnection.HTTP_OK){ screen.requestFailed(“Unexpected response code: “ + responseCode); connection.close(); return; }...

32 String contentType = connection.getHeaderField(“Content-type”); ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream responseData = connection.openInputStream(); byte[] buffer = new byte[10000]; int bytesRead = responseData.read(buffer); while (bytesRead > 0){ baos.write(buffer, 0, bytesRead); bytesRead = responseData.read(buffer); } baos.close(); connection.close(); screen.requestSucceeded(baos.toByteArray(), contentType); } catch (IOException ex){ screen.requestFailed(ex.toString()); }

33 public void requestSucceeded(byte[] result, String contentType) { if (contentType.equals("image/png") || contentType.equals("image/jpeg") || contentType.equals("image/gif")) { Bitmap bitmap = Bitmap.createBitmapFromBytes(result, 0, result.length, 1); synchronized (UiApplication.getEventLock()) { imageOutputField.setBitmap(bitmap); } else if (contentType.startsWith("text/")) { String strResult = new String(result); synchronized (UiApplication.getEventLock()) { textOutputField.setText(strResult); } else { synchronized (UiApplication.getEventLock()) { Dialog.alert("Unknown content type: " + contentType); }

34 public void requestFailed(final String message) { UiApplication.getUiApplication().invokeLater (new Runnable() { public void run() { Dialog.alert("Request failed. Reason: " + message); } }); }

35 .... and we’ve skipped some gory detail for now

36  See: http://beginningblackberry.appspot.com http://beginningblackberry.appspot.com  Enter some words in the form –  apple berry cinnamon doughnut  returns  doughnut cinnamon berry apple

37  What’s in the web application? Form img/apress_logo.png

38 - defines a form that the browser uses to send data to the web application - send data to the ULR “/” (the base URL ) - using HTTP POST

39   defines the text box  gives it the name “content”  the application expects the content to be something like:  content = ONE+TWO+THREE  “+” interpreted as a space

40   defines the “Go” button as invoking POST   indicates end of the form

41 private byte[] postData; - to pass the POST body to the dispatcher public HttpRequestDispatcher(String url, String method, NetworkingMainScreen screen, byte[] postData){ this.url = url; this.method = method; this.screen = screen; this.postData = postData; } - constructor to initialize

42 if (method.equals(“POST”) && postData != null){ connection.setRequestProperty(“Content-type”, “application/x-www-form-urlencoded”); OutputStream requestOutput = connection.openOutputStream(); requestOutput.write(postData); requestOutput.close(); }

43 private void postURL(){ String postString = postDataField.getText(); URLEncodedPostData encodedData = new URLEncodedPostData(null, false); encodedData.append(“content”, postString); HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField.getText(), “ POST”, this, encodedData.getBytes()); dispatcher.start(); }

44

45  let’s look at the code

46  explanation ... and let’s look at the code...

47  private void socketGet() {  SocketConnector connector = new SocketConnector(urlField.getText(), this);  connector.start();  }  private void postURL() {  String postString = postDataField.getText();  URLEncodedPostData encodedData = new URLEncodedPostData(null, false);  encodedData.append("content", postString);  HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField .getText(), "POST", this, encodedData.getBytes());  dispatcher.start();  }

48


Download ppt "CSCI 7010 UGA March 23 rd, 2010.  BES/MDS  TCP/IP  BIS  WiFi  WAP 2.0  WAP 1.0."

Similar presentations


Ads by Google