F_hawk189
F_hawk189
  • 发布:2019-04-12 12:53
  • 更新:2021-11-07 22:08
  • 阅读:18017

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 负责人:无 分享
已邀请:
Spring_CTH

Spring_CTH - Dcloud粉

然后我发现 我特么手机没连公司的WIFI!!!
url: "ws://192.168.1.22:8087/socket/cth1",
妈的用的局域网我草,
于是手机连上wifi后 就好了。我草!!!

  • xc_9418_

    大佬可以留下联系方式请教一下吗?

    2020-12-18 16:51

  • Spring_CTH

    回复 xc_9418_: 2625987756

    2021-04-23 13:54

  • z***@163.com

    卧槽 和你相隔三年 偶然搜到你这个回答 我才反应过来 我他么和你一样的问题

    2023-08-29 16:11

火龙果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 就是报错

  • 2***@qq.com

    大哥解决了吗 帮帮小弟这错找了一个星期了

    2021-03-22 15:56

火龙果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

  • 1***@qq.com

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

    2019-10-15 11:38

  • 1***@qq.com

    请问是怎么解决的呀?

    2021-07-12 15:50

  • 5***@qq.com

    回复 小朱葛:跟你一模一样, 请问怎么解决的

    2022-06-23 09:57

hhyang

hhyang - 如有问题,请添加QQ1606726660 备注付费咨询

yuegu

yuegu - 90后码族

大佬 问题解决了吗?

1***@qq.com

1***@qq.com

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

8***@qq.com

8***@qq.com

有人解决这个问题吗?

2***@qq.com

2***@qq.com

我也遇到这样问题,

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

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

GoEasy

GoEasy

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

junhun

junhun - 90后

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

[已删除]

[已删除]

官方提供的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

  • 2***@qq.com

    大哥解决吗

    2021-03-22 16:01

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

q***@163.com

q***@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里面去了。本地测试正常,线上直接这样了

2***@qq.com

2***@qq.com

请问一下解决了吗

  • DCloud_Android_ST

    请使用HX2.8.2测试下看看问题是否修复

    2020-07-28 11:35

  • 2***@qq.com

    回复 DCloud_Android_ST: 好的,我试试

    2020-07-28 15:03

  • 1***@qq.com

    回复 2***@qq.com: 你好 请问解决了吗? 我的最新版本链接成功走不到open

    2020-07-29 11:55

  • 2***@qq.com

    回复 2***@qq.com: 请问一下,用HX2.8.2能行吗?我这应用已经上线,编译器不敢随便更新,如果能行我这只能做强更了。

    2020-07-29 12:12

  • 2***@qq.com

    回复 DCloud_Android_ST: 我这用HBuilder X 2.8.3测试还是不行,连接成功,但是打开失败!

    2020-07-29 17:40

  • DCloud_Android_ST

    回复 2***@qq.com: 提供一下先关示例demo 我们安排复现一下问题

    2020-07-29 18:13

  • 2***@qq.com

    回复 DCloud_Android_ST: 已经解决了,是自己的问题,我把APP端和小程序端条件编译区分开就连接成功了。之前是只在小程序端连接成功,多谢了。

    2020-07-29 20:53

jonychen1

jonychen1

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

1***@qq.com

1***@qq.com - 90后IT男

最新的2.8.6仍然包这个bug

1***@qq.com

1***@qq.com - 90后IT男

测试项目

1***@qq.com

1***@qq.com

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

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

官网示例也是并列的

1***@qq.com

1***@qq.com - 90后IT男

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

时苏

时苏 - 眉毛以下截肢

我也出现了这个问题,但是我开始用的是微信开发者工具调试,我header里需要传个userId,后端一直接收不到
然后我换成了真机调试就可以了,header里的userId也可以正常接收到了
希望对你有帮助

Spring_CTH

Spring_CTH - Dcloud粉

我从早上8.30找到 下午4.30 就因为这个问题 我中午都没吃饭,我就纳闷了为啥H5可以、小程序可以、就在真机不可以、

蜡笔小新人

蜡笔小新人

同样的问题,H5可以,APP连接失败。
什么原因?怎么解决?
这楼已经盖了这么高了,木有一个是官方回复???

3***@qq.com

3***@qq.com

我的是因为 用的 wss 而我的测试服务器地址是http的,我改为ws就可以了. 而我上线的时候是https的,再改为wss打包就行了.搞了半天才发现...真实造孽啊

  • 2***@qq.com

    感谢,我也遇到这个问题,通过你这个方法解决的,http用ws,https才用wss,以前的配置里面我改了http没改socket

    2023-03-01 11:39

navi

navi

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

hBuilderX 3.2.9.20210927

代码如下
uni.connectSocket({
url: 'ws://10.14.31.76:8699/ws',
success: () => {
console.log('connectSocket success');
},
fail: () => {
console.log('connectSocket fail');
}
});
uni.onSocketOpen(function (res) {
console.log('WebSocket连接已打开!');
});
uni.onSocketMessage(function (res) {
console.log('收到服务器内容:' res.data);
});
uni.onSocketError(function (res) {
console.log('WebSocket连接打开失败,请检查!', res);
});

春种秋实

春种秋实

安装plus-websocket再试试吧
http://t.zoukankan.com/goloving-p-14744424.html

该问题目前已经被锁定, 无法添加新回复