Mobile Web Server Exercise Coap Server and Client

Mobile Web Server Exercise Coap Server and Client

Mobile Web Server Exercise CoAP Server and Client # In this exercise, you will create a CoAP server, also your will implement a simple CoAP client within the same application to test your CoAP server. In real world, client and server should be on different application or different machine. # Since the server and the client will be implemented on the same application, there should be no issue in communication. # You will be doing this by using WS4D's open source jCoAP library (http://ws4d.org/ws4d- jcoap/). # Download the source code of WS4D's CoAP library from http://kodu.ut.ee/~chang/org.zip # Extract the zip file to get 'org' folder, which contains all the source code you need to create CoAP server and client on Android. PART 1 – CoAP Server # Create a new Android Project. # Add permissions in your AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="e.c.coaptry01"> <!-- START OF ADDED PERMISSION --> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- END --> ... ... ... </manifest> # Copy 'org' folder you downloaded before to your project directory under src/main/java/ # Now in your src/java/, you should have: # a folder with your package name and a folder called org # and from the Android Studio view, you should see org.ws4d.coap appeared inside java directory. If you don't see it, try to refresh the list. # Create a CoAP resource in your MainActivity class //CoAP attributes private CoapResourceServer resourceServer; private BasicCoapResource bcs; # Add following content to onCreate method // CoAP resource server remove if(this.resourceServer != null){this.resourceServer.stop();} // CoAP resource server new init this.resourceServer = new CoapResourceServer(); // CoAP add resource bcs = new BasicCoapResource("/maha", "82", CoapMediaType.text_plain); this.resourceServer.createResource(bcs); bcs.registerServerListener(this.resourceServer); // CoAP Server start try { Log.v("*******", "Starting server..."); this.resourceServer.start(5683); } catch (Exception e) { e.printStackTrace(); } PART 2 – CoAP Client # Create a new Java class called TestClient within the same directory of your MainActivity class. # Import following classes: import android.util.Log; import org.ws4d.coap.core.CoapClient; import org.ws4d.coap.core.connection.BasicCoapChannelManager; import org.ws4d.coap.core.connection.api.CoapChannelManager; import org.ws4d.coap.core.connection.api.CoapClientChannel; import org.ws4d.coap.core.enumerations.CoapRequestCode; import org.ws4d.coap.core.messages.api.CoapRequest; import org.ws4d.coap.core.messages.api.CoapResponse; import org.ws4d.coap.core.tools.Encoder; import java.net.InetAddress; import java.net.UnknownHostException; # make CoapClient as your interface, e.g. public class TestClient implements CoapClient { # Copy the following content to your client class: private static final boolean exitAfterResponse = false; public void start(String serverAddress, int serverPort) { System.out.println("===START=== (Run Test Client)"); String sAddress = serverAddress; int sPort = serverPort; CoapChannelManager channelManager = BasicCoapChannelManager.getInstance(); CoapClientChannel clientChannel = null; try { clientChannel = channelManager.connect(this, InetAddress.getByName(sAddress), sPort); } catch (UnknownHostException e) { e.printStackTrace(); System.exit(-1); } CoapRequest request; if (null == clientChannel) { return; } request = clientChannel.createRequest(CoapRequestCode.GET, "/maha", true); clientChannel.sendMessage(request); } @Override public void onResponse(CoapClientChannel channel, CoapResponse response) { if (response.getPayload() != null) { Log.v("*******", "Response: " + response.toString() + " payload: " + Encoder.ByteToString(response.getPayload())); } else { System.out.println("Response: " + response.toString()); } if (this.exitAfterResponse) { Log.v("*******","===END==="); System.exit(0); } } @Override public void onMCResponse(CoapClientChannel channel, CoapResponse response, InetAddress srcAddress, int srcPort) { // TODO Auto-generated method stub } @Override public void onConnectionFailed(CoapClientChannel channel, boolean notReachable, boolean resetByServer) { Log.v("*******","Connection Failed"); System.exit(-1); } # Add new content to your MainActivity class; at the end of the onCreate() method: // Test the client - change the IP address according to your device or simply use 'localhost' new Thread(new Runnable() { public void run() { TestClient ct = new TestClient(); ct.start("192.168.2.6", CoapConstants.COAP_DEFAULT_PORT); } }).start(); # Now, run the application. # Finally, from the Logcat of your Android Studio, you should see the similar message below somewhere in your logs: V/*******: Response: ACK, Content_205, MsgId: 47186, #Options: 1 ( Content_Format) payload: 82 # which contains the CoAP request and the payload of the response is '82'. # If you cannot see the log, search for '*******' Homework Modify the response payload from the CoAP server to make the server reply a different value. e.g. the GPS value from Android API. See: https://courses.cs.ut.ee/2018/MAD/fall/Main/Homework5 .

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    4 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us