uni-app 连接socket后执行uni.request报错code 602001 已解决 TCP原生插件导致

uni-app 连接socket后执行uni.request报错code 602001 已解决 TCP原生插件导致

操作步骤:

  • 使用 const tastk = uni.connectSocket({}) 连接成功
  • 然后 task.send()
  • 然后执行 uni.reqest()
  • 然后就报错了

预期结果:

  • 预期不应该出现报错

实际结果:

  • 报错:
    [uts.sdk.modules.DCloudUniNetwork.RequestFailImpl]
    {
    "errCode":
    602001,
    "cause":
    {
    "code":
    0,
    "subject": null,
    "cause": null,
    "message": "android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)",
    "name": "Error"
    },
    "data": null,
    "errMsg": "request system error",
    "errSubject": "uni-request",
    "message": "",
    "name": "Error"
    }
    

bug描述:

【报Bug】连接socket后任何一个地方执行uni.request会报错

android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
[uts.sdk.modules.DCloudUniNetwork.RequestFailImpl]
{
"errCode":
602001,
"cause":
{
"code":
0,
"subject": null,
"cause": null,
"message": "android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)",
"name": "Error"
},
"data": null,
"errMsg": "request system error",
"errSubject": "uni-request",
"message": "",
"name": "Error"
}

表格信息

信息类别 详细信息
产品分类 uni-app x/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win11
HBuilderX类型 正式
HBuilderX版本号 4.36
手机系统 Android
手机系统版本号 Android 15
手机厂商 小米
手机机型 小米14Pro
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app 连接socket后执行uni.request报错code 602001 已解决 TCP原生插件导致的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

uni-app x发现的bug

更多关于uni-app 连接socket后执行uni.request报错code 602001 已解决 TCP原生插件导致的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在开发uni-app应用时,如果在使用原生TCP插件进行socket连接后,尝试执行uni.request网络请求时遇到错误码602001,这通常是由于TCP原生插件与网络请求模块冲突导致的。尽管你提到问题已解决,但这里提供一个示例代码和解决方案,以便其他开发者在遇到类似问题时参考。

问题背景

在使用uni-app开发时,可能会通过原生插件实现TCP/UDP等底层网络通信。然而,这些原生插件可能会占用或修改网络请求相关的配置,导致uni.request等标准网络请求方法无法正常工作。

解决方案

  1. 确保TCP连接正确关闭:在进行uni.request之前,确保所有的TCP连接已经正确关闭。这可以避免网络资源的冲突。

  2. 使用try-catch捕获异常:在进行网络请求时,使用try-catch结构捕获可能抛出的异常,以便更好地处理错误。

  3. 延迟执行uni.request:在某些情况下,延迟执行uni.request可以避开插件导致的冲突。可以使用setTimeout来延迟请求。

示例代码

以下是一个简单的示例,展示了如何在关闭TCP连接后执行uni.request,并使用setTimeout作为延迟执行的策略。

// 假设tcpClient是你的TCP原生插件实例
tcpClient.close(() => {
    console.log('TCP连接已关闭');
    
    // 使用setTimeout延迟执行uni.request
    setTimeout(() => {
        uni.request({
            url: 'https://api.example.com/data',
            method: 'GET',
            success: (res) => {
                console.log('请求成功:', res.data);
            },
            fail: (err) => {
                console.error('请求失败:', err);
            }
        });
    }, 1000); // 延迟1秒执行
});

// 如果TCP连接关闭过程中出现异常,进行捕获
try {
    // 这里可能是打开TCP连接或其他操作的代码
} catch (error) {
    console.error('TCP操作异常:', error);
}

注意事项

  • 确保TCP原生插件的使用符合其文档规范,避免不当使用导致的资源泄漏或冲突。
  • 在生产环境中,应根据实际情况调整setTimeout的延迟时间,以达到最佳性能和用户体验。
  • 如果问题持续存在,考虑查阅uni-app和TCP原生插件的官方文档或社区讨论,寻找是否有已知的bug或更新。

通过上述方法,可以有效避免TCP原生插件与uni.request之间的冲突,确保应用的稳定运行。

回到顶部