Android File Transfer not working via XMPP and OpenFire

纵然是瞬间 提交于 2019-12-03 12:57:53

问题


Problem : Can't receive a file sent to my android app via XMPP and OpenFire Server. I can successfully send a file though. The asmack jar I am using is asmack-jse-buddycloud-2010.12.11.jar

Code :

    connConfig = new ConnectionConfiguration("beta.myCompany.co.uk", 5222);
    connConfig.setSASLAuthenticationEnabled(true);
    try {
        connect("username", "password");
    } catch (Exception e) {
        e.printStackTrace();
    }

    ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
    if(sdm == null)
        sdm = new ServiceDiscoveryManager(connection);

    fileTransferManager = new FileTransferManager(connection);
    FileTransferNegotiator.setServiceEnabled(connection, true);

fileTransferManager.addFileTransferListener(new FileTransferListener() {
    @Override
    public void fileTransferRequest(FileTransferRequest request) {
        IncomingFileTransfer transfer = request.accept();
        try {
            FileOutputStream fos = openFileOutput(request.getFileName(), Context.MODE_PRIVATE);
            InputStream stream = transfer.recieveFile();//THIS FAILS!
            fos.write(IOUtils.toByteArray(stream));
            fos.close();    
        } catch (Exception e) {
            e.printStackTrace();
        }
}

Error (If file is sent via Spark) :

Error in execution: -- caused by: java.util.concurrent.ExecutionException: No response from file transfer initiator:

Error (If file is sent via Adium) :

java.util.concurrent.ExecutionException: Could not establish socket with any provided host: item-not-found(404) Could not establish socket with any provided host

Error (If file is sent via another instance of my app) :

Error in execution: -- caused by: java.util.concurrent.ExecutionException: -- caused by: No response from remote client:

My logs: (When attempting to receive file from Spark)

It appears that I am SENDING this error! (Not receiving it). Why would this be?

> 05-01 12:49:36.013: I/System.out(1000): 12:49:35 PM SENT (1093411736):
> <iq id="791-6222" to="beta.myCompany.co.uk"
> from="theUsername@beta.myCompany.co.uk/BAM-1918973529" type="error"><error
> code="501" type="CANCEL"><feature-not-implemented
> xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

Extra Logs :

05-01 14:46:06.133: I/System.out(1370): 02:46:06 PM RCV  (1093401112): <iq id="eRi5A-72" to="myUsername@beta.myCompany.co.uk/BAM-1755858011" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="set"><si xmlns="http://jabber.org/protocol/si" id="jsi_5991130279184702850" profile="http://jabber.org/protocol/si/profile/file-transfer"><file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="Test.rtf" size="318"><desc>Sending 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>
05-01 14:46:08.283: I/System.out(1370): 02:46:08 PM SENT (1093401112): <iq id="eRi5A-72" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" from="myUsername@beta.myCompany.co.uk/BAM-1755858011" type="result"><si xmlns="http://jabber.org/protocol/si"><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="submit"><field var="stream-method"><value>http://jabber.org/protocol/bytestreams</value></field></x></feature></si></iq>
05-01 14:46:08.312: I/System.out(1370): 02:46:08 PM RCV  (1093401112): <iq id="eRi5A-73" to="myUsername@beta.myCompany.co.uk/BAM-1755858011" type="get" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/disco#info"/></iq>
05-01 14:46:14.352: W/System.err(1370): Error in execution: 
05-01 14:46:14.352: W/System.err(1370):   -- caused by: java.util.concurrent.ExecutionException: No response from file transfer initiator:[
[ERROR LOG IS HERE]
05-01 14:46:14.732: I/System.out(1370): 02:46:14 PM SENT (1093401112): <iq id="eRi5A-73" to="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" type="result"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client" name="Smack" type="pc"/><feature var="http://jabber.org/protocol/caps"/><feature var="http://jabber.org/protocol/bytestreams"/><feature var="http://jabber.org/protocol/si/profile/file-transfer"/><feature var="http://jabber.org/protocol/si"/><feature var="http://jabber.org/protocol/ibb"/></query></iq>
05-01 14:46:14.773: I/System.out(1370): 02:46:14 PM RCV  (1093401112): <iq id="eRi5A-77" to="myUsername@beta.myCompany.co.uk/BAM-1755858011" type="set" from="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_5991130279184702850" mode="tcp"><streamhost jid="friendsUsername@beta.myCompany.co.uk/Spark 2.6.3" host="10.95.104.25" port="7777"/><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq>
05-01 14:46:29.783: I/System.out(1370): 02:46:29 PM RCV  (1093401112): <iq type="get" id="537-7113" from="beta.myCompany.co.uk" to="myUsername@beta.myCompany.co.uk/BAM-1755858011"><ping xmlns="urn:xmpp:ping"/></iq>
05-01 14:46:29.843: I/System.out(1370): 02:46:29 PM SENT (1093401112): <iq id="537-7113" to="beta.myCompany.co.uk" from="myUsername@beta.myCompany.co.uk/BAM-1755858011" type="error"><error code="501" type="CANCEL"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

回答1:


Use

transfer.receiveFile(myLocalFile);

instead of

InputStream stream = transfer.receive();

You are blocking the PacketReader thread. The first method will spawn it's own thread to read the specific packets that make up the parts of the file being transferred. If you use the second method you have to spawn a thread of your own to do the actual file reading and writing.




回答2:


I have created a simple program of Java , with some copy_paste of other users code , but the +point is that it is working , i have tried this b/w LocalHost - SPark client - javaProgram

you can send txt.file to other user , created in openFile User Section .

Note : please change any thing if you want any details in Xmpp.test class .

Download Xmpp File Transfer "Java Code" From Here



来源:https://stackoverflow.com/questions/10397079/android-file-transfer-not-working-via-xmpp-and-openfire

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!