JOSH的网络接口采用GCF(Generic Connection Framework)的形式,和JavaSE和JavaEE中普遍使用的java.net接口形式有所不同。GCF可以被用来建立网络连接,也可以用作短信收发(在有短信能力的硬件平台上),或是文件系统访问。今天我们结合demo,看一下如何用GCF接口,建立基本的TCP连接,同服务器进行数据通信。
我们以www.baidu.com的80端口为例,建立一个TCP连接。其中socket://是网络协议的identifier,代表我们想建立的是一个TCP连接。如果是UDP连接,identifier则是datagram://,短信是sms://。但是由于底层平台和网络类型的差别,除了TCP以外,其他的连接形式都和具体实现相关,不一定在每个平台都支持。
如果只需要向服务器发送数据,则只开输出流就行。如果发送接收都需要,那就开两个流,一个输入,一个输出。
我们首先模拟一个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); } }作为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解析的原始数据)。
在下一篇里,我们将利用开发板的SPI接口,点亮一块SPI串口屏。有意思的是,这个串口屏的驱动程序,是以Java语言写成的。我将在接下来的系列文章里,还会向大家展示SPI接口是如何用Java驱动的。