uni-app中如何建立socket连接

发布于 1周前 作者 itying888 来自 Uni-App

uni-app中如何建立socket连接

使用hbuild如何实现tcp的socket连接,原生的android可以newsocket = new Socket(ip_addr, ip_port)实现,如果使用hbuild该如何实现???

51 回复

我今天试了一下,可以建立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能花官方多长时间啊,这个又搞不定,还老被指引到这里来

首先ios和Android4.4支持websocket,可直接用。
对于Android4.4以下,可以使用最佳答案里的Native.js。不过其实现在4.4以下的手机也可以放弃了
用socket.io的js库,它会自动屏蔽Android4.4以下不兼容websocket的问题,相关资料自行搜索。

哪里有sdk插件的集成方法吗?

也可以使用、、jq.websocket,连接服务器,我现在的问题是,,怎么在安装app时,启动两个进程,一个运行程序,一个负责socket连接,程序退出后,连接还在不受影响,这样就可以接受到服务端推过来的消息了。

后台服务整出来了没,这个思路是对的

之前使用phonegap时是自己写的插件实现的,不知道hbuild是如何实现法?

为什么没有iOS的示例代码?

ios用websocket

android de ye buxiangxi

回复 DCloud_heavensoft:websocket可以发送UDP数据吗

赶紧解决这个问题,,socket,可以用原生解决方案,为什么不实现呢

有谁搞定的?分享下代码啊,跪求啊大哥大姐。

这个直接用web socket就好啊 我现在面临得问题是想能解决游戏的音效和音乐分离的问题

websocket怎么解决锁屏后(或者休眠后)几分钟(很可能受省电模式的影响)老是断开又连接的问题?

这个怎么连得、、有具体的例子吗、、我怎么连不上

收不到回来的消息

收不到回来的消息

上面的代码我测试了,可以连接服务器,也能够给服务器发送数据,但是服务器发回来的数据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连接。

  1. 在页面的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连接了。

回到顶部