我使用xmpp协议制作了一对一的聊天应用程序。现在我想在我的应用程序中发送图像和视频。我搜索了许多关于文件传输但我没有找到解决方案。我使用下面的代码进行Socket连接。
请帮帮我怎样才能做到这一点。
我的代码是:
[TURNSocket setProxyCandidates:@[@"MyserverHost-desktop"]];
XMPPJID *jid = [XMPPJID jidWithString:@"1254225445@MyserverHost-desktop"];
TURNSocket *turnSocket = [[TURNSocket alloc] initWithStream:[[self appDelegate]xmppStream] toJID:jid];
[app.turnSocketArray addObject:turnSocket];
[turnSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[turnSocket release];
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket
{
}
- (void)turnSocketDidFail:(TURNSocket *)sender
{
}
每次Connection fail方法调用..
感谢。
答案 0 :(得分:0)
我使用其他方法传输媒体文件。
1)发件人将媒体文件上传到服务器并获取网址。
2)发件人发送JSON,如下所示:{" type":" Image"," URL":"这是图片的网址&# 34; }
3)Receiver从服务器接收JSON并下载图像。
4)接收器显示图像。
答案 1 :(得分:0)
即使我没有将图像直接发送到xmpp,因为它需要很长时间。
在我的项目中,我的消息可以是字符串,它可以是图像,我发现只有一种方法可以发送消息,即...
[xmppRoom sendMessageWithBody:@"Your msg"];
所以发送图像首先我将它转换为base64然后将其上传到我的服务器并从服务器获取该图像的URL。获得URL后,只需在Above方法中传递该URL即可。
我遇到的问题是如何隔离正常消息和URL(图像)
因此,为了发送普通文本,我直接将其发送到函数上面,但是为了发送URL我发送了nsdictionary,即我将nsdictionary转换为字符串并将其发送到上面的函数
NSDictionary *dict = @{@"type":@"image",
@"url":@"Url of your image"};
NSString *newMessage = [NSString stringWithFormat:@"%@",dict];
[appDelegate.xmppRoom sendMessageWithBody:newMessage];
用于隔离正常消息和图像 -
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
messages *msg = [messages new];
NSDictionary *dictOfMedia = [NSPropertyListSerialization
propertyListWithData:[[[message elementForName:@"body"] stringValue] dataUsingEncoding:NSUTF8StringEncoding]
options:kNilOptions
format:NULL
error:NULL];
if ([dictOfMedia objectForKey:@"type"])
{
msg.mediaType = [dictOfMedia objectForKey:@"type"];
msg.url = [dictOfMedia objectForKey:@"url"];
}
else
{
msg.msg = [[message elementForName:@"body"] stringValue];
}
}
消息是我的模型类,您只需使用nsstring进行测试即可。
在此之后,只需使用任何开源项目下载图像或自行执行延迟加载。
希望这会对你有所帮助:)。