用Java语言开发物联网设备应用(5)

用Java语言开发物联网应用(5)

  • 网络应用开发
    • 建立服务器连接
    • 打开数据流
    • 发送请求
    • 从服务器读取回应
  • 下一篇——点亮LCD屏

网络应用开发

JOSH的网络接口采用GCF(Generic Connection Framework)的形式,和JavaSE和JavaEE中普遍使用的java.net接口形式有所不同。GCF可以被用来建立网络连接,也可以用作短信收发(在有短信能力的硬件平台上),或是文件系统访问。今天我们结合demo,看一下如何用GCF接口,建立基本的TCP连接,同服务器进行数据通信。

建立服务器连接

// 建立连接
streamConnection = (StreamConnection) Connector.open(“socket://www.baidu.com:80);

我们以www.baidu.com的80端口为例,建立一个TCP连接。其中socket://是网络协议的identifier,代表我们想建立的是一个TCP连接。如果是UDP连接,identifier则是datagram://,短信是sms://。但是由于底层平台和网络类型的差别,除了TCP以外,其他的连接形式都和具体实现相关,不一定在每个平台都支持。

打开数据流

// 打开输入数据流
inputStream = streamConnection.openInputStream();
// 打开输出数据流
outputStream = streamConnection.openOutputStream();

如果只需要向服务器发送数据,则只开输出流就行。如果发送接收都需要,那就开两个流,一个输入,一个输出。

发送请求

我们首先模拟一个HTTP请求的数据包准备发送:

// 发送请求
String request = "GET / HTTP/1.0\n\n";
byte[] reqBytes = request.getBytes();
sendData(reqBytes, 0, reqBytes.length);

发送函数sendData的实现如下:

private static void sendData(byte[] buffer, int off, int len) throws IOException {
	if (outputStream != null) {
		outputStream.write(buffer, off, len);
	}
}

从服务器读取回应

int len = 0;
byte[] buffer = new byte[256];
// 读数据
while ((len = inputStream.read(buffer)) != -1) {
	System.out.println(new String(buffer, 0, len, "utf-8"));
}

作为TCP示例代码,我们暂不对HTTP协议进行解析,只是简单地将服务器返回的结果原封不动地打印到JOSH Studio控制台。

完整地代码示例,可以在此下载:SocketDemo.zip。如果不清楚从JOSH Studio如何直接导入SocketDemo的话,可以参考这篇文档:https://doc.joshvm.com/demo/socket

以上网络Demo,可以同时在模拟器调试看到结果(方法参考本系列第1篇),也可以在JOSH MEGA8300(2G网络开发板,方法参考本系列第2篇)或ESP32 Wifi开发板设备上运行(方法参考本系列第3篇)。运行后,应该在JOSH Studio的输出控制台看到从www.baidu.com取下的首页数据(未经HTTP解析的原始数据)。

下一篇——点亮LCD屏

在下一篇里,我们将利用开发板的SPI接口,点亮一块SPI串口屏。有意思的是,这个串口屏的驱动程序,是以Java语言写成的。我将在接下来的系列文章里,还会向大家展示SPI接口是如何用Java驱动的。

你可能感兴趣的:(JOSH)