现在正在使用Xmpp文件传输,在Android.While中发送文件,它提供了503个服务不可用的错误。
> 07-29 15:33:12.183: D/SMACK(22151): 03:33:12 PM SENT (1095973320):
> <iq id="s9DTB-10" to="jithu4@jabber.org/Smack"
> from="jithu1@jabber.org/Smack" type="set"><si
> xmlns="http://jabber.org/protocol/si" id="jsi_6388535575928662640"
> mime-type="image/jpeg"
> profile="http://jabber.org/protocol/si/profile/file-transfer"><file
> xmlns="http://jabber.org/protocol/si/profile/file-transfer"
> name="IMG_20130715_115622_1445552069.jpg" size="2105955"
> ><desc>test_file</desc></file><feature xmlns="http://jabber.org/protocol/feature-neg"><x
> xmlns="jabber:x:data" type="form"><field var="stream-method"
> type="list-single"><option><value>http://jabber.org/protocol/bytestreams</value></option><option><value>http://jabber.org/protocol/ibb</value></option></field></x></feature></si></iq>在那之后,它做出了这样的反应。
> 07-29 15:33:12.708: D/SMACK(22151): 03:33:12 PM RCV (1095973320): <iq
> from='jithu4@jabber.org/Smack' to='jithu1@jabber.org/Smack'
> type='error' id='s9DTB-10'><error code='503'
> type='cancel'><service-unavailable
> xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>Am使用asmack-android-6-0.8.1.1.jar库
请帮助我,为什么会发生这个503错误。
发布于 2014-11-06 05:52:26
将服务发现添加到代码中。您可以使用下面的代码进行文件传输。
ServiceDiscoveryManager sdm = ServiceDiscoveryManager
.getInstanceFor(kXmppConnection);
if (sdm == null)
sdm = new ServiceDiscoveryManager(XmppConnection);
sdm.addFeature("http://jabber.org/protocol/disco#info");
sdm.addFeature("jabber:iq:privacy");
FileTransferNegotiator.setServiceEnabled(kXmppConnection,
true);
FileTransferManager manager = new FileTransferManager(
kXmppConnection);
final OutgoingFileTransfer transfer = manager
.createOutgoingFileTransfer(jid + "/Smack");
File file = new File(file_path);
try {
transfer.sendFile(file, "test_file");
} catch (XMPPException e) {
e.printStackTrace();
}
new AsyncTask<Void, Void, Void>() {
protected void onPreExecute() {
}
@Override
protected Void doInBackground(Void... params) {
while (!transfer.isDone()) {
if (transfer.getStatus().equals("Error")) {
Log.d("file transfer",
"ERROR!!! " + transfer.getError());
} else if (transfer.getStatus().equals("Cancelled")
|| transfer.getStatus().equals("Refused")) {
Log.d("file transfer",
"Cancelled!!! " + transfer.getError());
}
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
};
protected void onPostExecute(Void result) {
if (transfer.getStatus().equals("Refused")
|| transfer.getStatus().equals("Error")
|| transfer.getStatus().equals("Cancelled")) {
Log.i("file transfer", "refused cancelled error "
+ transfer.getError());
} else {
Log.i("file transfer", "Success: " + transfer.getFileName());
}
};
}.execute();发布于 2018-02-15 21:39:56
我也有同样的问题,我调查了这一节并以这种方式解决了它。
许多人使用"/Smack“或"/Resource"作为jid中的资源部分,但这可以采用另一种方式。
资源路径是随着用户的存在而改变的。让我们说,我们想要发送图像给这个用户:"user1@mydomain"
您必须在这个jid中添加"/Resource“或"/Smack”部件,然后它变成如下所示:
但是资源路径是随存在而变化的,因此您必须遵循每次存在更改来更新资源路径。获得用户存在的最佳方法是在名册侦听器中,在presencheChanged()方法中,您将得到最后一个用户资源部分,如下所示:
Roster roster=getRoster();
roster.addRosterListener(new RosterListener() {
@Override
public void entriesAdded(Collection<Jid> addresses) {
Log.d("entriesAdded", "ug");
context.sendBroadcast(new Intent("ENTRIES_ADDED"));
}
@Override
public void entriesUpdated(Collection<Jid> addresses) {
Log.d("entriesUpdated", "ug");
}
@Override
public void entriesDeleted(Collection<Jid> addresses) {
Log.d("entriesDeleted", "ug");
}
@Override
public void presenceChanged(Presence presence) {
Log.d("presenceChanged", "ug");
//Resource from presence
String resource = presence.getFrom().getResourceOrEmpty().toString();
//Update resource part for user in DB or preferences
//...
}
});
}资源字符串将是一些生成的字符串,如"6u1613j3kv“,jid将变成:
这意味着您必须像这样创建您的传出传输:
EntityFullJid jid = JidCreate.entityFullFrom("user1@mydomain/6u1613j3kv");
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(jid)这就是我如何解决我的问题,文件传输的smack和Openfire。
此外,还必须在Openfire服务器中添加以下属性:
xmpp.proxy.enabled - true
xmpp.proxy.externalip - MY_IP_ADDRESS
xmpp.proxy.port -7777值得一提的是,我使用的是Openfire 4.0.2和Smack 4.2.2。
而且,这可以简单地配置,只需将资源设置为
XMPPTCPConnectionConfiguration.Builder。
喜欢
XMPPTCPConnectionConfiguration.Builder configurationBuilder =
XMPPTCPConnectionConfiguration.builder();
configurationBuilder.setResource("yourResourceName");https://stackoverflow.com/questions/17921288
复制相似问题