通过本节的学习,您将了解到如何使用JavaScript代码来实现以太网(RJ45接口)TCP通信。JSDuino开发板目前支持一个socket通信,不管是客户端还是服务端都使用w5500上的socket 0。由于w5500最多能支持8个socket,所以在后续固件中会增加到8个socket。 这一章主要向大家详细介绍一下JavaScript语言当中的回调函数机制。所谓的回调函数,就是那些通过某些带有注册功能的函数(例如下面的key.on)将某个函数注册到指定的位置。当任务列队检测到有任务事件时,根据事件内容来判断要到哪个位置去执行这个注册的函数(回调函数)。这个时候可以很清楚的看到,JavaScript语言代码的整体框架风格其实就是基于这个回调函数来设计的,我们可以把很多偶然性、异步性的、周期性的行为通过回调函数来实现,这样大大简化的程序设计的逻辑难度。那么这个回调函数在使用中需要注意哪些地方呢? 第一,在JSDuino开发板中,如果同样的注册函数注册了多个不同的函数,那么下一次的注册会覆盖上一次的注册。第二,根据注册函数的说明来注册相应类型的函数,比如注册函数会对回调函数参数个数和类型有要求。如果注册的函数参数类型或者个数不符合要求,那么这个函数不会被执行。
net模块封装了如下几个API可供使用: connect(ip, port) 发起一个socket连接
close() 关闭一个socket连接
write(data, size) 已连接的socket发送数据 参数 | | | Buffer或者string数据,当为string类型时,不需要指明size | | |
on(event, function) 注册一个socket事件的回调函数 参数 | | | 注册的事件类型,字符串型,connected事件表示已经连接、data事件表示有数据接收到 | | 回调函数参数包括2个参数:Buffer或者string数据, 数据长度 |
listen(port) Server Socket监听一个端口
Javascript 客户端代码
[mw_shl_code=javascript,true]var net = require("net");
var key = require("key");
function key_cb(name){
print(name);
print(net.connect("10.1.1.177", 9090));
}
key.on(key_cb);
//连接成功的回调函数
function connect_callback(){
print("socket connected!");
}
//客户端获取到数据的回调函数
function data_callback(data, size){
print(size);
}
//注册回调函数
net.on("connected", connect_callback);
net.on("data", data_callback);
function loop(){
while(true){
}
}
loop();
[/mw_shl_code]
实验结果 当按下任意用户自定义按键后,建立连接;当连接成功后,打印连接成功信息;当按socket接收到数据后,打印数据长度。
Javascript 服务端代码
[mw_shl_code=javascript,true]var net = require("net");
var key = require("key");
//按键按下,监听端口
function key_cb(name){
print(name);
net.listen(9090);
}
key.on(key_cb);
//连接成功的回调函数
function connect_callback(){
print("socket connected!");
}
//客户端获取到数据的回调函数
function data_callback(data, size){
print(size);
}
//注册回调函数
net.on("connected", connect_callback);
net.on("data", data_callback);
function loop(){
while(true){
}
}
loop();
[/mw_shl_code]
实验结果 当按下任意用户自定义按键后,建立监听连接;当客户端连接成功后,打印连接成功信息;当按socket接收到数据后,打印数据长度。
|