使用iOS XMPPFramework和OpenFire Server进行TURN连接

时间:2012-04-12 12:34:02

标签: ios cocoa-touch xmpp openfire xmppframework

问题:如何使用iOS XMPPFramework和OpenFire Server获得成功的TURN连接。我希望能够发送和接收文件。

注意:我的代码基础来自以下教程:http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-server-setup/

2012年4月13日更新:经过更多研究后,我认为我需要在这个问题中展示的真实相关代码是......

这是TURNSocket尝试连接的地方

XMPPJID *jid = [XMPPJID jidWithString:@"myFriendsUsername@beta.myCompany.co.uk"];

NSLog(@"Attempting TURN connection to %@", jid);

TURNSocket *turnSocket = [[TURNSocket alloc] initWithStream:[self xmppStream] toJID:jid];

[turnSockets addObject:turnSocket];

[turnSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[turnSocket release];

然而,当我通过代码调试时,在TURNSocket中,我得到一条评论,其中指出“我们无法从列表中找到单个代理服务器”。这是因为Array'streamhosts'永远不会被填充。可能是什么问题?是否有某些XML应该告诉我这个问题?问题可能出在OpenFire上吗?

3 个答案:

答案 0 :(得分:0)

如果没有向TurnSocket.m提供带有资源的完整jID,则会导致问题!这是在SMChatViewController的viewDidLoad中传递的

例如使用

  

friendsUsername@beta.myCompany.co.uk/spark

而不是

  

friendsUsername@beta.myCompany.co.uk

我可以按照here

的要求在此项目上取得进展

答案 1 :(得分:0)

这是您调用的TURNSocket的类方法 填充TURNSocket的代理候选者 流主机。所以你应该把streamhost放回去 在stream-host之前它是什么。

+ (void)setProxyCandidates:(NSArray *)candidates;

[TURNSocket setProxyCandidates:@["host1.somedomain.com", @"host2.someotherdomain.com"]];

答案 2 :(得分:-1)

在TurnSocket的processRequestResponse.m中,streamhost元素的名称不是OpenFire给我的。我已经改变了这个

NSXMLElement *streamhostUsed = [query elementForName:@"streamhost-used"];

到这个

NSXMLElement *streamhostUsed = [query elementForName:@"streamhost"];

但是,我现在遇到一个新错误,我正在为... OpenFire/XMPP 503 service-unavailable error (XEP-0065 using iOS XMPPFramework)

开始一个新问题

更新20/4/2012 :我现在相信这个答案错误!如果它工作正常,streamhostUsed会出现,而不是streamhost出错!