连接 VPN 服务器时“Error Domain=NEVPNErrorDomain Code=1 \"(null)\"”

2024-02-01

我在连接到 VPN 服务器时仅第一次收到“Error Domain=NEVPNErrorDomain Code=1 \"(null)\"”,之后就可以正常工作了。

我查过尝试启动 TunnelProvider 网络扩展时出现 NEVPNErrorDomain 错误 1 https://stackoverflow.com/questions/35325487/nevpnerrordomain-error-1-when-trying-to-start-tunnelprovider-network-extension与我的问题类似,并按照此解决方案中所述的方式进行操作,但仍然遇到相同的错误。

这是我使用网络扩展连接到 VPN 服务器的代码。

func initVPNTunnelProviderManager(){

    self.vpnManager.loadFromPreferences { (error) -> Void in

        if((error) != nil) {
            print("VPN Preferences error: 1")
        }
        else {

            let p = NEVPNProtocolIKEv2()
            p.username = "******"
            p.remoteIdentifier = "*****"
            p.serverAddress = "******"

            let keychain = KeychainSwift()
            let data = keychain.getData("vpnPassword")

            p.passwordReference = data
            p.authenticationMethod = NEVPNIKEAuthenticationMethod.none
            p.useExtendedAuthentication = true
            p.disconnectOnSleep = false

            self.vpnManager.protocolConfiguration = p
            self.vpnManager.isEnabled = true

            self.vpnManager.saveToPreferences(completionHandler: { (error) -> Void in
                if((error) != nil) {
                    print("VPN Preferences error: 2")
                }
                else {

                    var startError: NSError?

                    do {
                        try self.vpnManager.connection.startVPNTunnel()
                    }
                    catch let error as NSError {
                        startError = error
                        print(startError)
                    }
                    catch {
                        print("Fatal Error")
                        fatalError()
                    }
                    if((startError) != nil) {

                        **// Here it comes first time later onwards it goes to else block. (Which I'm expecting first time too)
                        print("VPN Preferences error: 3")**

                        let alertController = UIAlertController(title: "Oops..", message:
                            "Something went wrong while connecting to the VPN. Please try again.", preferredStyle: UIAlertControllerStyle.alert)
                        alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil))

                        self.present(alertController, animated: true, completion: nil)
                        print(startError)
                    }
                    else {
                        print("Start VPN")
                    }
                }
            })
        }
    }
}

有人可以帮助我为什么这是第一次进去吗?

if((startError) != nil) { 
 // Here is control coming for first time
}
else {
// Which should always come here //later onwards its coming here, not first time.
}

注意:我找到了相关帖子在 GitHub 上 https://github.com/iCepa/iCepa/issues/9但如果我尝试这个解决方案,它会给出Optional(Error Domain=NEVPNErrorDomain Code=4 "(null)") 问题,因为配置已过时,需要加载。您应该调用 loadFromPreferencesWithCompletionHandler: 并在完成处理程序中修改要修改的值,然后调用 saveToPreferencesWithCompletionHandler:。

提前致谢。


解决方案是:

Calling 从首选项加载之后再次保存到首选项加载完成后启动连接将解决该问题。这听起来很愚蠢。

self.vpnManager.saveToPreferences(completionHandler: { (error) -> Void in
    if ((error) != nil) {
        print("VPN Preferences error: 2")
    }
    else {
        self.vpnManager.loadFromPreferences(completionHandler: { (error) in
            if ((error) != nil) {
                print("VPN Preferences error: 2")
            }
            else {
                var startError: NSError?
                do {
                    try self.vpnManager.connection.startVPNTunnel()
                }
                catch let error as NSError {
                    startError = error
                    print(startError)
                }
                catch {
                    print("Fatal Error")
                    fatalError()
                }
                if ((startError) != nil) {
                    print("VPN Preferences error: 3")
                    let alertController = UIAlertController( title: "Oops..", message: "Something went wrong while connecting to the VPN. Please try again.", preferredStyle: UIAlertControllerStyle.alert)
                    alertController.addAction( UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil))       
                    self.present(alertController, animated: true, completion: nil)
                    print(startError)
                }
                else {
                    self.VPNStatusDidChange(nil)
                    print("Start VPN")
                }
            }
        })
    }
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接 VPN 服务器时“Error Domain=NEVPNErrorDomain Code=1 \"(null)\"” 的相关文章

随机推荐

  • 为什么 Guava 中不推荐使用 Files.deleteDirectoryContents() ?

    在 Guava 10 中 Google 已弃用文件 deleteDirectoryContents https google github io guava releases 10 0 api docs com google common
  • GADT 上的模式匹配失败

    我更多地使用 ReasonML 并发现了模式匹配type t从以下示例开始 无法处理该错误 错误 此模式与 t float 类型的值匹配 但需要一个与 t int 类型的值匹配的模式 float 类型与 int 类型不兼容 type t a
  • Pandas str 和 object 类型的区别

    Numpy 似乎区分了str and object类型 例如我可以这样做 gt gt gt import pandas as pd gt gt gt import numpy as np gt gt gt np dtype str dtyp
  • 从文件读取清单时出现异常。 Microsoft Word 插件 VSTO

    我正在尝试创建一个 Microsoft Word 插件 每次保存 Word 文档 自动保存或手动保存 时 该插件都会添加并提交到 git 存储库 当我从 Visual Studio 调试模式 中运行程序时 我已经能够获得我想要的功能 当我发
  • constexpr 函数在多个模块中共享

    当我使用 constexpr 函数时 我注意到一个奇怪的行为 我将代码简化为一个简化的示例 从两个不同的翻译单元 模块 A 和 B 调用两个函数 include
  • IllegalStateException: 当前不在 FragmentManager 中

    我知道这听起来像是重复的FragmentStatePagerAdapter IllegalStateException 当前不在 FragmentManager 中 https stackoverflow com questions 112
  • 在我的 Node 应用程序中使用 SSH 连接到 MongoDB

    我的数据库使用 DigitalOcean 我正在尝试在我的节点应用程序中连接到它 我发现了一个名为的 npmtunnel ssh但是我无法连接到它 我的代码如下 它说数据库连接成功 但是当我执行console log mongoose 它显
  • 小程序未显示完整

    我刚刚创建了一个小程序 public class HomeApplet extends JApplet private static final long serialVersionUID 7650916407386219367L Call
  • 为数据层中的实体添加与 .NET Identity ApplicationUser 的关系

    我正在构建一个带有用户登录身份的 NET MVC 应用程序 该应用程序有四层 Web UI 层 参考了我的域和服务层 领域层 没有引用 服务层 参考了我的数据层和领域层 数据层 参考了我的领域层 我想要我的AppUser类与我的数据层中的实
  • 如何使用mongoose动态连接多个mongodb数据库?

    我的项目中有很多数据库 一个是masterDb 其他都是基于masterDb的数据库连接 例如 在验证页面中 用户可以输入 公司 ID 可以使用 masterDb 检查该 公司 ID 如果 ID 存在 则返回特定公司的数据库名称 使用数据库
  • 如何使用Hibernate带来的JBoss日志记录?

    我正在编写使用 Hibernate 的独立 java 应用程序 梅文带来了jboss logging图书馆对我来说 我没有使用 JBoss 问题是 我可以只使用这个库进行日志记录 还是需要下载一些日志记录实现 例如log4j JBoss L
  • 垂直对齐块元素中的文本

    我知道总是有人问垂直对齐 但我似乎无法找到这个特定示例的解决方案 我希望文本在元素内居中 而不是元素本身居中 li a width 300px height 100px margin auto 0 display block backgro
  • 如何在 React 中渲染对象数组?

    你能告诉我如何在 React js 中渲染列表吗 我喜欢这个 https plnkr co edit X9Ov5roJtTSk9YhqYUdp p preview https plnkr co edit X9Ov5roJtTSk9YhqYU
  • Android:如何在缩放和平移后获取图像的X,Y坐标

    我正在开发一个具有缩放和平移图像的应用程序 现在 当用户触摸图像 缩放和平移之后 时 我需要获取图像的 X y 坐标 而不是诸如方法 event getX 和事件之类的屏幕坐标 getX 帮助我 非常感谢 我知道这个问题有点老了 但我面临着
  • 重启浏览器后右键菜单消失

    我正在开发一个 chrome 扩展 我在扩展程序的右键菜单中添加了一个新的菜单项 安装后工作正常 然后当我重新启动浏览器时 新的右键菜单项消失了 但是扩展工作正常 只有新的菜单项消失了 我比较了chrome官方的contextMenu示例
  • 链接不适用于 jsp 和 jquery(如何在 jsp 页面中的锚标记中链接 websiteurl)

    在我的本地主机中它正在工作 但在我的网站上www step2java com the Java核心链接不起作用 部署后 他们将项目根文件夹放入我的 public html 中 例如 Step2java 请告诉我如何解决 我只使用jsp和jq
  • 在移动视口隐藏或删除 div 类?

    首先 我非常了解 CSS 媒体查询 我的问题是这样的 当你将 div 类堆叠在一个 div 中时 例子 div class class1 class2 div 并且您想删除 class2 media 最大宽度 768px 创建以下输出 di
  • Javascript 代理 set() 继承对象上的本地属性

    根据MDN https developer mozilla org en US docs Web JavaScript Reference Global Objects Proxy handler set handler set 可以捕获继
  • 查找空白注入 PHP 文件

    PHP 文件中的空格有时会出现问题 因此我尝试查找符合常见问题标准的文件 我试图递归地查找具有以下一个或两个条件的所有文件 1 不以 a 开头 lt or 特点 and or 2 不以a结尾 gt 字符 除非它确实以右大括号结尾 后跟任意数
  • 连接 VPN 服务器时“Error Domain=NEVPNErrorDomain Code=1 \"(null)\"”

    我在连接到 VPN 服务器时仅第一次收到 Error Domain NEVPNErrorDomain Code 1 null 之后就可以正常工作了 我查过尝试启动 TunnelProvider 网络扩展时出现 NEVPNErrorDomai