uni-app中如何建立socket连接
uni-app中如何建立socket连接
使用hbuild如何实现tcp的socket连接,原生的android可以newsocket = new Socket(ip_addr, ip_port)
实现,如果使用hbuild该如何实现???
我今天试了一下,可以建立Socket连接了,也能进行数据收发。js代码如下:
function testSocket(){
if (plus.os.name == “Android”) {
var Socket = plus.android.importClass(“java.net.Socket”);
var PrintWriter = plus.android.importClass(“java.io.PrintWriter”);
var BufferedWriter = plus.android.importClass(“java.io.BufferedWriter”);
var OutputStreamWriter = plus.android.importClass(“java.io.OutputStreamWriter”);
var BufferedReader = plus.android.importClass(“java.io.BufferedReader”);
var InputStreamReader = plus.android.importClass(“java.io.InputStreamReader”);
var socket = new Socket("192.168.23.8", 8080);
var outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
var bufferWriter = new BufferedWriter(outputStreamWriter);
var out = new PrintWriter(bufferWriter, true);
out.println("Conneted...");
var inputStreamReader = new InputStreamReader(socket.getInputStream());
var br = new BufferedReader(inputStreamReader);
var msg = br.readLine();
//while(true)
{
if(msg != null)
{
console.log(msg);
}
//msg = br.readLine();
}
}
//console.log(mac);
alert("Done");
}
不过随之而来的一个问题是:如何开一个线程或者服务来接收服务器端发来的消息。
回复 Chuck: 期待你继续研究,万一遇到Native.js有bug,爆出来,我们优先解决。
回复 DCloud_heavensoft:我再捣鼓捣鼓~
我这边连接的为何创建出来的socket对象一直是null?
可以了,莫名其妙好了
我想问下这个socket有问题为什么还要作为官方插件放在这里??????
为什么客户端接收不到服务端的信息
回复 Chuck:你好啊, thread搞定了吗,有没有解决方法哦,
回复 一切归零:你是怎么建立Socket连接的,能进行数据收发吗?
回复 Chuck: 你好问下线程阻塞的解决办法有吗
今天测试了一下最佳评论里面的代码,发现居然报错了!!!
Uncaught android.os.NetworkOnMainThreadException;at new java.net.Socket
不能在主线程调用网络,只能采用异步方式。而且,这个问题出现在Andriod 4.0以上:
Android在4.0之前的版本 支持在主线程中访问网络,4.0以后不支持。 解决方法: 1.通过新的线程访问网络
然后,新的线程访问是不可能了,目前NJS的一块短板,真头疼。
然后看了些文章,说可以用StrictMode来改良异步阻塞问题,于是果断对上面Chuck大神的代码改良了一下。
var Socket = plus.android.importClass(“java.net.Socket”);
var PrintWriter = plus.android.importClass(“java.io.PrintWriter”);
var BufferedWriter = plus.android.importClass(“java.io.BufferedWriter”);
var OutputStreamWriter = plus.android.importClass(“java.io.OutputStreamWriter”);
var BufferedReader = plus.android.importClass(“java.io.BufferedReader”);
var InputStreamReader = plus.android.importClass(“java.io.InputStreamReader”);
//测试改良
var StrictMode = plus.android.importClass("android.os.StrictMode");
var Build = plus.android.importClass("android.os.Build");
if (Build.VERSION.SDK_INT > 9) {
var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
var socket = new Socket("192.168.1.100",9100);
于是,可以了……这里加个Andriod版本判断,可以兼容4.0以上和4.0以上。
谢天谢地解决问题,我终于可以用Andriod手机去调用热敏打印机愉快地打印小票了!
我用java-adt打包能调么?
大哥,碰到你的错误,我终于按照你的方法解决了,谢谢!
必须赞这哥儿们,好样的
大哥,这是纯hbuilder开发的,还是和android混合开发的?求解答
请问如何实现打印的?
我想问下,打印中文乱码,怎么解决啊
官方真实坑爹,集成下websocket能花官方多长时间啊,这个又搞不定,还老被指引到这里来
顶啊
dingdingding
支持你
首先ios和Android4.4支持websocket,可直接用。
对于Android4.4以下,可以使用最佳答案里的Native.js。不过其实现在4.4以下的手机也可以放弃了
用socket.io的js库,它会自动屏蔽Android4.4以下不兼容websocket的问题,相关资料自行搜索。
哪里有sdk插件的集成方法吗?
也可以使用、、jq.websocket,连接服务器,我现在的问题是,,怎么在安装app时,启动两个进程,一个运行程序,一个负责socket连接,程序退出后,连接还在不受影响,这样就可以接受到服务端推过来的消息了。
后台服务整出来了没,这个思路是对的
之前使用phonegap时是自己写的插件实现的,不知道hbuild是如何实现法?
为什么没有iOS的示例代码?
android de ye buxiangxi
回复 DCloud_heavensoft:websocket可以发送UDP数据吗
赶紧解决这个问题,,socket,可以用原生解决方案,为什么不实现呢
有谁搞定的?分享下代码啊,跪求啊大哥大姐。
这个直接用web socket就好啊 我现在面临得问题是想能解决游戏的音效和音乐分离的问题
websocket怎么解决锁屏后(或者休眠后)几分钟(很可能受省电模式的影响)老是断开又连接的问题?
这个怎么连得、、有具体的例子吗、、我怎么连不上
mark
收不到回来的消息
收不到回来的消息
上面的代码我测试了,可以连接服务器,也能够给服务器发送数据,但是服务器发回来的数据app接收不到啊!怎么回事呢?
为什么我按照@Sychel大神的修改了,还是提示报错: Uncaught android.os.NetworkOnMainThreadException;at new java.net.Socket
现在有一个问题,我socket连接了之后,out.println(“Conneted…”);发送了一次数据,我还想再发数据用什么方法呢?
学习一下
怎么更改传输的编码呀
哪一种网口pos打印机 这个呢
这个socket怎么调用呢?
socket打印中文乱码
怎么打包使用,我测试可以用,打包代码就出现错误
请问后端服务必须用java吗?
在uni-app中建立Socket连接,你可以使用uni.connectSocket接口。以下是一个简单的示例,展示如何在uni-app中建立并管理一个Socket连接。
首先,确保你的uni-app项目已经创建并配置好。然后,你可以按照以下步骤来建立Socket连接。
- 在页面的onLoad方法中初始化Socket连接:
Page({
data: {
socketOpen: false,
messages: []
},
onLoad: function() {
// 创建Socket连接
this.socketOpen = uni.connectSocket({
url: 'wss://your-socket-server-url', // 替换为你的Socket服务器URL
success: (res) => {
console.log('Socket连接已打开', res);
this.setData({ socketOpen: true });
},
fail: (err) => {
console.error('Socket连接打开失败', err);
}
});
// 监听Socket打开事件
this.socketOpen.onOpen((res) => {
console.log('WebSocket连接已打开', res);
});
// 监听Socket消息事件
this.socketOpen.onMessage((res) => {
console.log('收到服务器内容:' + res.data);
this.setData({
messages: [...this.data.messages, res.data]
});
});
// 监听Socket关闭事件
this.socketOpen.onClose((res) => {
console.log('WebSocket 已关闭!', res);
this.setData({ socketOpen: false });
});
// 监听Socket错误事件
this.socketOpen.onError((err) => {
console.error('WebSocket错误', err);
});
},
// 发送消息给服务器
sendMessage: function(message) {
if (this.socketOpen) {
this.socketOpen.send({
data: message,
success: () => {
console.log('消息已发送');
},
fail: (err) => {
console.error('消息发送失败', err);
}
});
} else {
uni.showToast({
title: 'Socket未连接',
icon: 'none'
});
}
},
onUnload: function() {
// 页面卸载时关闭Socket连接
if (this.socketOpen) {
this.socketOpen.close({
success: () => {
console.log('Socket已关闭');
}
});
}
}
});
在这个示例中,我们在页面的onLoad
方法中初始化了Socket连接,并设置了几个事件监听器来处理Socket的打开、消息接收、关闭和错误事件。同时,我们还提供了一个sendMessage
方法,用于向服务器发送消息。在页面卸载时,我们关闭Socket连接以确保资源被正确释放。
请确保将wss://your-socket-server-url
替换为你实际的Socket服务器URL。这样,你就可以在uni-app中成功建立并管理一个Socket连接了。