源代码如下:
1、TODO标记地方不能获取ip地址,其它数据获取正常
(function($) {
$.send = function() {
if (plus.os.name == "Android") {
// import package
var DatagramPacket = plus.android.importClass("java.net.DatagramPacket");
var DatagramSocket = plus.android.importClass("java.net.DatagramSocket");
var InetAddress = plus.android.importClass("java.net.InetAddress");
var InterruptedIOException = plus.android.importClass("java.io.InterruptedIOException");
// InetAddress
var addr = "255.255.255.255",
port = 8080, // 60000
TTLTime = 5000;
var ia = new InetAddress();
var address = ia.getByName(addr);
// socket
var socket = new DatagramSocket();
socket.setSoTimeout(TTLTime);
var mac = device.Mac();
// console.log(mac);
var data = tools.StringToUTF8Bytes(mac);
var packet = new DatagramPacket(data, data.length, address, port);
// 发送数据
socket.send(packet);
// 接收返回数据
var arr = new Array(255);
arr = tools.StringToUTF8Bytes(arr.toString());
var resPacket = new DatagramPacket(arr, arr.length);
var messageReceived = false;
while (!messageReceived) {
try {
// console.log(tools.BytesToUTF8String(packet.getData()));
socket.receive(resPacket);
var res = tools.BytesToUTF8String(resPacket.getData());
// 返回接收的数据或发送出的数据。
console.log(res);
// 返回发送出的或接收到的数据的长度。
console.log(resPacket.getLength());
// 返回接收或发送此数据报文的机器的 IP 地址。
// TODO:获取不到ip地址???
console.log(resPacket.getAddress());
// 获取偏移量
console.log(resPacket.getOffset());
// console.log(new String(resPacket.getData(), resPacket.getOffset(), resPacket.getLength()));
// 返回接收或发送该数据报文的远程主机端口号
console.log(resPacket.getPort());
} catch (InterruptedIOException) {
// 当receive不到信息或者receive时间超时捕获异常
console.log("catch");
messageReceived = true;
// 关闭数据报
socket.close();
}
}
} else {
plus.nativeUI.toast("不支持的版本: " + plus.os.name);
}
};
document.addEventListener("plusready", function() {
console.log("当前页面URL: " + plus.webview.currentWebview().getURL());
$.send();
}, false);
})(window.udp = {});
4 个回复
viney (作者) - app的春天来了
提供NodeJS服务端代码
1、先启动服务端
2、直接跑上面的程序就可以
Android_磊子
参考下http://ask.dcloud.net.cn/question/13494不知道有没有帮助对你。
viney (作者)
没有帮助,现在我的疑问是,调用没有获得数据。
// TODO:获取不到ip地址???
console.log(resPacket.getAddress());
// 返回接收或发送该数据报文的远程主机端口号
console.log(resPacket.getPort()); //这个能获取数据
2015-12-24 14:55
viney (作者) - app的春天来了
附上java原生代码:
client.java
server.java
java原生代码getAddress().getHostAddress()方法获取数据正常,native.js返回Uncaught TypeError: Object #<h> has no method 'getHostAddress'异常。
Android_磊子
这样的特定需求,需要自己先进行android原生层技术实现,在测试成功后转化NJS过程中出现问题,我们可以协助解决。
2015-12-25 11:01
viney (作者) - app的春天来了
问题已经解决:
不是bug
var serverAddress = resPacket.getAddress();
plus.android.importClass(serverAddress);
console.log(serverAddress.getHostAddress());