下面我们来利用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程序 链接如下:

