下面我们来利用Californium来编写一个COAP协议的HELLO WORLD程序的服务器端&客户端
你将得到:
通过Californium的jar包来实现一个COAP协议的服务器端&客户端。客户端通过GET请求到服务器端,服务器端响应 hello world.
必需准备:
1.大概15分钟时间。
2.JDK1.8或更高版本
4.Eclipse
开始构建:
1.在eclipse中创建一个java project。
2. 我们编写类COAPServerDemo1来作为COAP服务器。代码如下:
package com.stalvan.cf.demo.server; import java.net.Inet4Address; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketException; import org.eclipse.californium.core.CoapResource; import org.eclipse.californium.core.CoapServer; import org.eclipse.californium.core.network.CoapEndpoint; import org.eclipse.californium.core.network.EndpointManager; import org.eclipse.californium.core.network.config.NetworkConfig; import org.eclipse.californium.core.server.resources.CoapExchange; public class COAPServerDemo1 extends CoapServer { private static final int COAP_PORT = NetworkConfig.getStandard().getInt(NetworkConfig.Keys.COAP_PORT); /* * Application entry point. */ public static void main(String[] args) { try { // create server COAPServerDemo1 server = new COAPServerDemo1(); // add endpoints on all IP addresses server.addEndpoints(); server.start(); } catch (SocketException e) { System.err.println("Failed to initialize server: " + e.getMessage()); } } /** * Add individual endpoints listening on default CoAP port on all IPv4 addresses of all network interfaces. */ private void addEndpoints() { for (InetAddress addr : EndpointManager.getEndpointManager().getNetworkInterfaces()) { // only binds to IPv4 addresses and localhost if (addr instanceof Inet4Address || addr.isLoopbackAddress()) { InetSocketAddress bindToAddress = new InetSocketAddress(addr, COAP_PORT); addEndpoint(new CoapEndpoint(bindToAddress)); } } } /* * Constructor for a new Hello-World server. Here, the resources * of the server are initialized. */ public COAPServerDemo1() throws SocketException { // provide an instance of a Hello-World resource add(new HelloWorldResource()); } /* * Definition of the Hello-World Resource */ class HelloWorldResource extends CoapResource { public HelloWorldResource() { // set resource identifier super("helloWorld"); // set display name getAttributes().setTitle("Hello-World Resource"); } @Override public void handleGET(CoapExchange exchange) { // respond to the request exchange.respond("Hello World!"); } } }
3.client客户端类代码如下:
/******************************************************************************* * Copyright (c) 2015 Institute for Pervasive Computing, ETH Zurich and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.html. * * Contributors: * Matthias Kovatsch - creator and main architect * Achim Kraus (Bosch Software Innovations GmbH) - add saving payload ******************************************************************************/ package com.stalvan.cf.demo.client; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.eclipse.californium.core.CoapClient; import org.eclipse.californium.core.CoapResponse; import org.eclipse.californium.core.Utils; public class COAPClientDemo1 { /* * Application entry point. * */ public static void main(String args[]) { URI uri = null; // URI parameter of the request if (args.length > 0) { // input URI from command line arguments try { uri = new URI(args[0]); } catch (URISyntaxException e) { System.err.println("Invalid URI: " + e.getMessage()); System.exit(-1); } CoapClient client = new CoapClient(uri); CoapResponse response = client.get(); if (response!=null) { System.out.println(response.getCode()); System.out.println(response.getOptions()); if (args.length > 1) { try (FileOutputStream out = new FileOutputStream(args[1])) { out.write(response.getPayload()); } catch (IOException e) { e.printStackTrace(); } } else { System.out.println(response.getResponseText()); System.out.println(System.lineSeparator() + "ADVANCED" + System.lineSeparator()); // access advanced API with access to more details through // .advanced() System.out.println(Utils.prettyPrint(response)); } } else { System.out.println("No response received."); } } else { // display help System.out.println("Californium (Cf) GET Client"); System.out.println("(c) 2014, Institute for Pervasive Computing, ETH Zurich"); System.out.println(); System.out.println("Usage : " + COAPClientDemo1.class.getSimpleName() + " URI [file]"); System.out.println(" URI : The CoAP URI of the remote resource to GET"); System.out.println(" file: optional filename to save the received payload"); } } }
4.打开pom.xml加入californium jar的依赖,并下载依赖,代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>HelloWorldCOAP</groupId> <artifactId>HelloWorldCOAP</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.eclipse.californium</groupId> <artifactId>californium-core</artifactId> <version>1.0.4</version> </dependency> </dependencies> </project>
5.启动服务器端程序。
在服务器类中 run as java application
6.启动客户端程序
在客户端类中 先点击 run configuration 在程序参数中加入 coap://127.0.0.1:5683/helloWorld
然后运行客户端类,可以看到,请求服务器成功,并得到相应 Hello World!
至此 搭建完毕。如需下载DEMO程序 链接如下: