csci 7010 uga march 23 rd, 2010. bes/mds tcp/ip bis wifi wap 2.0 wap 1.0

48
Creating Network- Enabled Applications CSCI 7010 UGA March 23 rd , 2010

Upload: clement-carter

Post on 30-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

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

Creating Network-Enabled Applications

CSCI 7010UGAMarch 23rd, 2010

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

Ways to Connect

BES/MDSTCP/IPBISWiFiWAP 2.0WAP 1.0

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

BES/MDS

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

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

TCP/IP

Transmission Control Protocol/Internet Protocol

a “regular” internet connectionworks with most devices

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

BIS

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

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

WiFi

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

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

WAP 2.0

Wireless Access Protocolconnects through wireless carrier’s

WAP gatewayno Blackberry-specific infrastructure

but user’s plan must support WAP 2.0 (most do)

don’t need to configure as with TCP/IP

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

WAP 1.0

older version of WAPsupported by all Blackberry devicesbut doesn’t support secure

connections as do other methods

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

So many choices ...

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

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

The “Service Book”

how the device maintains info about its configuration

records about optional applicationsemail account configurationconnection methods available on a

device

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

Service Book

open device Options

click Advanced Options Service Book

Demo on the simulator

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

Service Book records

Two parts: CID – defines the type of record UID – a unique identifier

most connection methods have a record in the service book

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

The Connector class

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”); or HttpConnection connection = (HttpConnection)

Connector.open(“http://www.apress.com”);

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

In general ...

Connection_type connectionName= (Connection_type) Connector.open(URL);

Connection_type is some subclass of ConnectionconnectionName is a variable name that you

chooseURL takes the form

scheme://host:port/path[optional parameters]Example URLs:

file://myfile.htmlhttp://www.apress.com:80/book/catalogsocket://www.apress.com:80https://www.amazon.com/gp/flex/sign-in/select.html

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

HTTP Basics

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

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

http client

opens a connection to an http serversends a request message receives the responsedisplays result

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

http server

listens for a connection from client receives a requestdelivers a responsecloses the connection

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

http message

initial line (different for request & response)

header lines (zero or more)blank lineoptional message body

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

initial request line

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

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

initial response line

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

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

The Sample Application

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

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

NetworkingApplication.javapackage 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();

}}

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

NetworkingMainScreen.javapackage 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

}

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

Constructor

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);

}

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

Creating a menu

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();}}

);}

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

Threads

http://www.purpletech.com/talks/Threads.ppt

More on multi-threading (if you’re interested):

http://www.cs.uga.edu/~eileen/Concurrency_tutorials

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

MenuItem, in more detail

You can learn about any component by looking at the API documentation.

See:http://www.blackberry.com/developers/docs/4.1api/index.htmlto learn more about the MenuItem component

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

When the user clicks “Get”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

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

HttpRequestDispatcher

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;...

}

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

Constructors

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; }

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

run() – simple version

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; }...

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

run() – simple version, continuedString 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());}}

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

requestSucceeded(...)

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);}

}}

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

requestFailed(...)

public void requestFailed(final String message) {UiApplication.getUiApplication().invokeLater(new Runnable() {

public void run() {Dialog.alert("Request failed. Reason: " + message);

}});

}

}

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

...

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

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

Let’s run the web application from a browser again ...

See: http://beginningblackberry.appspot.com

Enter some words in the form – apple berry cinnamon doughnut

returns doughnut cinnamon berry apple

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

Two-way interaction:Sending data with HTTP POST

What’s in the web application?

<html> <head><title>Form</title></head>

<body><img src="img/apress_logo.png" /><br /> <form action="/" method="POST"><br /> <input type="text"

name="content"></input> <input type="submit" value="Go!"/>

</form> </body></html>

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

<form>

<form action="/" method="POST">- 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

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

<input>

<input type="text" name="content"></input>

defines the text boxgives it the name “content”

the application expects the content to be something like:

content = ONE+TWO+THREE“+” interpreted as a space

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

<input type="submit" value="Go!"/> defines the “Go” button as invoking

POST

</form> indicates end of the form

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

Modified HttpRequestDispatcher

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

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

check for POST data before sending

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

OutputStream requestOutput = connection.openOutputStream();

requestOutput.write(postData);requestOutput.close();

}

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

postURL

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();}

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

... stop here today ...

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

HEAD

let’s look at the code

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

Socket Basics

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

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

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(); }

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