F_hawk189
F_hawk189
  • 发布:2019-04-12 12:53
  • 更新:2020-08-18 16:59
  • 阅读:5737

uni-app的websocket连接成功但是打开失败

分类:uni-app

先附代码:

                                               uni.connectSocket({  
                        url: 'ws://192.168.4.1:8888',  
                        success: function() {  
                            console.log("WebSocket连接成功");  
                            // that.sleep(2000);  
                            uni.onSocketOpen(function(res) {  
                                console.log('WebSocket连接已打开!');  
                                uni.sendSocketMessage({  
                                    data: that.bssid,  
                                    // data: "a6:12:12:12:12:12",  
                                    success: function() {  
                                        console.log("数据发送成功,数据为:" + that.bssid);  

                                        //-----------------------------------------  
                                        console.log("数据发送结束,开始接收");  
                                        // that.sleep(2000);  
                                        uni.onSocketMessage(function(res) {  
                                            isReceive = true;  
                                            console.log('收到服务器内容:' + res.data);  

                                            uni.closeSocket({  
                                                success: function() {  
                                                    console.log("websocket关闭成功");  
                                                },  
                                                fail: function() {  
                                                    console.log("websocket关闭失败");  
                                                }  
                                            })  

                                        })  
                                        //--------------------------------------  

                                    },  
                                    fail: function() {  
                                        console.log("数据发送失败");  
                                    }  
                                });  

                                uni.onSocketClose(function(res){  
                                    console.log("websocket已关闭");  
                                    if (isReceive == false) {  
                                        uni.hideLoading();  
                                        uni.showToast({  
                                            title: "通信失败",  
                                            icon:'none'  
                                        })  
                                    }  
                                    else {  
                                        // uni.hideLoading();  
                                    }  
                                })  

                            })  
                        },  
                        fail: function(){  
                            uni.hideLoading();  
                            uni.showToast({  
                                title: "设备初始化失败",  
                                icon:'none'  
                            })  
                        },  
                    // )};   

                })  
                    uni.onSocketError(function(res) {  
                        uni.hideLoading();  
                        console.log('WebSocket连接打开失败,请检查!');  
                        uni.showToast({  
                            title: "设备初始化失败",  
                            icon: "none"  
                        })  
                        return false;  
                    });  
            },

在connect前已经确认服务端连接成功,运行结果:
33859776
192.168.4.2
IP地址分配成功,开始通信
开始connect.........
WebSocket连接成功
WebSocket connection to 'ws://192.168.4.1:8888/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
WebSocket连接打开失败,请检查!
websocket已关闭

2019-04-12 12:53 负责人:无 分享
已邀请:
火龙果kiki

火龙果kiki

解决了吗

  • F_hawk189 (作者)

    没解决,时而出现时而不出现,莫名打开失败

    2019-04-22 23:09

火龙果kiki

火龙果kiki

我pc端 可以连接成功,emit 都是正常的。 手机端用UNI开发,使用connectSocket 提示连接成功,但是 onSocketOpen 就是报错

  • wwwwt

    大佬解决了吗

    2020-06-15 11:33

火龙果kiki

火龙果kiki

我pc端 可以连接成功,emit 都是正常的。 手机端用UNI开发,使用connectSocket 提示连接成功,但是 onSocketOpen 就是报错

火龙果kiki

火龙果kiki

这个是bug吗

火龙果kiki

火龙果kiki

这个是bug吗

火龙果kiki

火龙果kiki

这个是bug吗

火龙果kiki

火龙果kiki

这个是bug吗

火龙果kiki

火龙果kiki

这个是bug吗

火龙果kiki

火龙果kiki

无意间发现个bug, 连续点击 同一条消息会发布多次。。。。。。。。。

火龙果kiki

火龙果kiki

我的是 连接成功以后报这个错
WebSocket connection to 'ws://192.168.1.18/' failed: Connection closed before receiving a handshake response

  • F_hawk189 (作者)

    接收响应之前socket关闭,我的也偶尔出现这个问题,服务端没有返回数据但是服务端显示socket已经被关闭了

    2019-04-23 16:39

彭彭

彭彭

郁闷 我也碰到类似的错误了,,,connect链接上了,可是走不到open里面去,直接到onerror了 可是打印出来err信息又是空的 浏览器调试好的 真机不行 App也不行

  • 小朱葛

    遇到相同的问题,擦,怎么解决啊

    2019-06-20 15:17

  • 彭彭

    回复 小朱葛: wss变成ws就好了

    2019-06-20 15:36

  • 小朱葛

    回复 彭彭: 本来就是ws 实际测试了,ios 有header信息, 安卓没有header 信息,安卓连接直接跳到error 然后返回的err是 空对象

    2019-06-25 18:17

  • 1454079780@qq.com

    回复 小朱葛: 请问解决了。无法走到open里面去了。

    2019-10-15 11:38

1606726660@qq.com

1606726660@qq.com

675473760@qq.com

675473760@qq.com - 90后码族

大佬 问题解决了吗?

1253144186@qq.com

1253144186@qq.com

总是open连接超时,怎么解决

80701023@qq.com

80701023@qq.com

有人解决这个问题吗?

2801794259@qq.com

2801794259@qq.com

我也遇到这样问题,

destroyed() {  
             uni.closeSocket();  
        },

在销毁期间时,关闭WebSocket就行

GoEasy

GoEasy

自己要做稳定,一个坑接着一个坑。可以看看插件市场里这个插件:https://ext.dcloud.net.cn/plugin?id=1334

junhun

junhun - 90后

uni-app调用websocket连接成功,但是open失败,什么原因啊!!!!!!!!,服了

刁不二

刁不二 - 我的uniapp

官方提供的api都是链接成功,然后打开链接失败。就不走open

  • snail_lt

    怎么办呀,不走open@DCloud_App_Array

    2020-03-30 15:20

  • 刁不二

    回复 snail_lt: 我用的他们提供的插件weapp.socket.io,这个在h5端,小程序端和手机自定义基座上都没问题,正式打包到安卓上就不行,收不到服务器发来的消息

    2020-04-07 16:08

  • snail_lt

    回复 刁不二: 找到了一个plus.socket,这个ios 可以用

    2020-04-08 09:11

DCloud_Android_ST

DCloud_Android_ST

请使用HX 2.6.9+试下看看问题是否已修复

  • 刁不二

    我用的就是hX 2.6.9这个版本打的包

    2020-04-07 16:29

  • DCloud_Android_ST

    回复 刁不二: 请提供一个简单的示例。我们测试验证问题。如果验证会尽快修复

    2020-04-07 16:39

  • 刁不二

    回复 DCloud_Android_ST: 给个邮箱吧

    2020-04-07 16:45

  • 刁不二

    回复 DCloud_Android_ST: let socketUrl = getApp().globalData.socketUrl;

    import io from"../../js/weapp.socket.io.js";

    // 接收方法

    socket.on('new_msg', d => {

    console.log(d);

    var aPos = d.indexOf('=');

    var bPos = d.indexOf(',');

    var code = d.substr(aPos + 1, bPos - aPos - 1);

    var index2 = d.lastIndexOf('=') + 1;

    var token = d.substr(index2);

    console.log(code);

    console.log(token)

    if(code==2000){

    uni.showToast({

    title:'您有新订单',

    icon:'none',

    duration:1500

    })

    // 调用手机震动

    uni.vibrateLong({

    success: function () {

    console.log('手机震动');

    }

    });

    that.isNull = true;

    that.orderToken = token;

    // 获取订单

    that.getOrder(token);

    that.countDown(that);

    }else if(code==2001){

    uni.navigateTo({

    url:'../cancelCk/cancelCk'

    })

    }


            });  
    // 连接失败
    socket.on('reconnect_failed', () => {
    uni.showToast({
    title:'链接失败',
    icon:'none',
    duration:1500
    })
    });
    //接收当前在线人数
    // socket.on('update_online_count',d=>{
    // console.log('update_online_count',d);
    // })

    },

    2020-04-07 16:58

  • DCloud_Android_ST

    回复 刁不二: shutao@dcloud.io

    2020-04-07 17:05

qxl0130@163.com

qxl0130@163.com

VM21 asdebug.js:1 WebSocket connection to 'wss://ks.njxkjxx.com/talk/websocket/webSocketServer.do?userToken=486a50a0ce9f466da44b24dff874f7d7' failed: Error during WebSocket handshake: Unexpected response code: 400
无法走到open里面去了。本地测试正常,线上直接这样了

2670717187@qq.com

2670717187@qq.com

请问一下解决了吗

jonychen1

jonychen1

在uniapp插件市场发现一款挺不错的websocket插件,支持uniapp、小程序这些,用起来稳定性和实时性都不错,还具备自动重连、心跳机制,是一个比较不错的解决方案。地址:https://ext.dcloud.net.cn/plugin?id=1334

1473508077@qq.com

1473508077@qq.com - 90后IT男

最新的2.8.6仍然包这个bug

1473508077@qq.com

1473508077@qq.com - 90后IT男

测试项目

1159192451@qq.com

1159192451@qq.com

onSocketOpen不用写在success回调里吧,链接建立后,会一直监听的,除非app关闭

uni.connectSocket({  
  url: 'wss://www.example.com/socket'  
});  
uni.onSocketOpen(function (res) {  
  console.log('WebSocket连接已打开!');  
});  

官网示例也是并列的

1473508077@qq.com

1473508077@qq.com - 90后IT男

java问题,后端拦截了,已解决

要回复问题请先登录注册