问题:如何使用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上吗?
答案 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
出错!