如何使用xmpp框架在iphone sdk中发送/接收文件?
目前我正在使用 XEP-0065
类,并使用以下代码:
ObjTURNSocket = [[TURNSocket alloc] initWithStream:((TestAppDelegate*)[[UIApplication sharedApplication] delegate]).xmppStream
toJID:chatuser.jid];
[ObjTURNSocket start:self];
我从服务器收到以下响应:
<iq type="error" id="AB2ED567-B97F-4DFE-B789-7731A617C239" to="kapil@testweb/6df6dc96" from="jabber.org">
<query xmlns="http://jabber.org/protocol/disco#items"/>
<error code="404" type="cancel">
<remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>`
任何帮助或建议将不胜感激。
最佳答案
首先,使用可用于代理的可能服务器数组调用 setProxyCandidates。默认值为“jabber.org”,并且您的服务器未与 jabber.org 联合,这就是您收到迪斯科错误的原因。
接下来,在您的委托(delegate)中实现以下方法:
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket;
- (void)turnSocketDidFail:(TURNSocket *)sender;
然后,在 didSucceed 实现中,使用以下方法在传入的套接字上发送数据:
- (void)writeData:(NSData *)data
withTimeout:(NSTimeInterval)timeout
tag:(long)tag;
最后,关闭套接字:
- (void)disconnectAfterWriting;
我通过查看 TURNSocket.m 的源代码发现了这一点,查找硬编码的“jabber.org”,然后搜索 [delegate
以查找调用委托(delegate)的位置。这让我回到TURNSocket.h ,其中记录了供委托(delegate)执行的协议(protocol)。
关于iphone - XMPP 在 iphone sdk 中发送/接收文件...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328553/