在swift 3中无法连接到xmpp中的套接字

Posted

技术标签:

【中文标题】在swift 3中无法连接到xmpp中的套接字【英文标题】:Can not connect to socket in xmpp in swift 3 【发布时间】:2017-01-17 02:57:28 【问题描述】:

我正在尝试连接 xmpp 流套接字但无法连接。我正在使用 swift 3。它在 Objcetiv-C 和 swift 2.0 中工作,但在 swift 3 中不工作。请查看我的以下代码并请帮助我。谢谢。

func setupStream()

    xmppStreamChat = XMPPStream.init()

    xmppReconnect = XMPPReconnect()
    //xmppRosterStorage = XMPPRosterCoreDataStorage.init()
    xmppRoster = XMPPRoster.init(rosterStorage: xmppRosterStorage)
    xmppRoster.autoFetchRoster = true;

    xmppStreamChat.addDelegate(self, delegateQueue: DispatchQueue.main)
    xmppRoster.addDelegate(self, delegateQueue: DispatchQueue.main)

    xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = true;

    xmppvCardStorage = XMPPvCardCoreDataStorage.sharedInstance();
    xmppvCardTempModule = XMPPvCardTempModule.init(vCardStorage: xmppvCardStorage)

    xmppvCardAvatarModule = XMPPvCardAvatarModule.init(vCardTempModule: xmppvCardTempModule)
    xmppCapabilitiesStorage = XMPPCapabilitiesCoreDataStorage.sharedInstance();
    xmppCapabilities = XMPPCapabilities.init(capabilitiesStorage: xmppCapabilitiesStorage);
    xmppCapabilities.autoFetchHashedCapabilities = true;
    xmppCapabilities.autoFetchNonHashedCapabilities = false;
    xmppReconnect.activate(xmppStreamChat)
    xmppRoster.activate(xmppStreamChat)

    xmppvCardTempModule.activate(xmppStreamChat)
    xmppvCardAvatarModule.activate(xmppStreamChat)
    xmppCapabilities.activate(xmppStreamChat)


    xmppStreamChat.hostName = "95.138.180.254"
    xmppStreamChat.hostPort = 5222


func connect() -> Bool

    if !((xmppStreamChat.isConnected()))
    
        let jabberID = (UserDefaults.standard.value(forKey: "XMPPUserName") as! String) + "@95.138.180.254"
        let myPassword = UserDefaults.standard.string(forKey: "XMPPPassword")

        if !((xmppStreamChat.isDisconnected()))
        
            return true
        

        if jabberID.length == 0 && myPassword?.length == 0
        
            return false
        
        xmppStreamChat.myJID = XMPPJID.init(string: jabberID)
        do 
            try xmppStreamChat.connect(withTimeout: XMPPStreamTimeoutNone)
            print(xmppStreamChat.isConnecting()) // This prints true
            //try xmppStreamChat.connect(to: xmppStreamChat.myJID, withAddress: nil, withTimeout: XMPPStreamTimeoutNone)
            print("Connection success")
            return true
         catch 
            print("Something went wrong!")
            return false
        
    
    else
    
        return true
    

xmppStream(_sender: XMPPStream, socketDidConnect socket: GCDAsyncSocket) 该方法被调用,但之后没有任何委托方法被调用。如果可以的话请帮忙。提前致谢。

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

按如下方式制作该类的单例:

class XMPPController: NSObject 

static let sharedInstance = XMPPController();

你的设置方法:

    func setupStream()
    
    /***set up code goes here***/
    

现在你的连接方法:

func connect() -> Bool
    /***connect code goes here***/
    

现在在另一个控制器中调用它,如下所示:

    func testConnect() 
            XMPPController.sharedInstance.setupStream();
            XMPPController.sharedInstance.connect();
    

【讨论】:

以上是关于在swift 3中无法连接到xmpp中的套接字的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 HTTP 绑定连接到 XMPP 服务器(openfire)

android中的python套接字无法连接到在virtualbox中运行的python服务器

无法使用 aSmack 连接到本地 XMPP 服务器

Jabber-Net 发布版本无法连接到 XMPP 服务器

如果 JS 代码未托管在服务器上(CORS?),Strophejs XMPP Hello World 无法连接到服务器

无法使用 node.js 和 node-xmpp 连接到 GTalk