2012-05-01 3 views
8

Задача: Не удается получить файл, отправленный в приложение для Android через XMPP и OpenFire Server. Однако я могу успешно отправить файл. Asmack банку я использую asmack-JSE-buddycloud-2010.12.11.jarПередача файлов Android без работы через XMPP и OpenFire

Код:

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 (Если файл отправляется через Спарк):

Ошибка в исполнении: - вызвано: java.util.concurrent.ExecutionException: ответа от файла передачи Инициатор:

Error (Если файл отправляется через Adium):

java.util.concurrent.ExecutionException: Не удалось установить сокет с любым хостом при условии: item- не-найдено (404) не удалось установить сокет с любым хостом при условии

Error (Если файл отправляется через другой экземпляр моего приложения):

Ошибка при выполнении: - вызвано следующими причинами: java.util.concurrent.ExecutionException: - вызвано следующими причинами: Нет ответа от удаленного клиента:

Моих журналов: (При попытке получить файл из Спарк)

оказывается, что я отправляю эту ошибку! (Не получает его). Почему это должно быть?

> 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="[email protected]/BAM-1918973529" type="error"><error 
> code="501" type="CANCEL"><feature-not-implemented 
> xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq> 

Дополнительные Бревна:

05-01 14:46:06.133: I/System.out(1370): 02:46:06 PM RCV (1093401112): <iq id="eRi5A-72" to="[email protected]/BAM-1755858011" from="[email protected]/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="[email protected]/Spark 2.6.3" from="[email protected]/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="[email protected]/BAM-1755858011" type="get" from="[email protected]/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="[email protected]/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="[email protected]/BAM-1755858011" type="set" from="[email protected]/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_5991130279184702850" mode="tcp"><streamhost jid="[email protected]/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="[email protected]/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="[email protected]/BAM-1755858011" type="error"><error code="501" type="CANCEL"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq> 
+0

XMPP строфы до 501 ошибок с обеих сторон было бы интересно. – Flow

+0

Спасибо за ваш ответ. Я добавил больше журналов из своего приложения до 501. –

+0

привет @AndyA вы можете помочь мне на этом http://stackoverflow.com/questions/11666963/file-is-not-being-transferred-in-smack- api – juned

ответ

3

Использование

transfer.receiveFile(myLocalFile); 

вместо

InputStream stream = transfer.receive(); 

Вы блокирование PacketReader нити. Первый метод породит собственный поток для чтения конкретных пакетов, составляющих части передаваемого файла. Если вы используете второй метод, вы должны создать собственный поток, чтобы выполнять фактическое чтение и запись файлов.

+0

Это работает. Следующий код можно использовать для чтения файла. IncomingFileTransfer transfer = request.accept(); transfer.recieveFile (новый файл (getExternalFilesDir (null), transfer.getFileName())); Строка; BufferedReader br = новый BufferedReader (новый FileReader (новый файл (getExternalFilesDir (null), transfer.getFileName()))); while ((line = br.readLine())! = null) System.out.println (строка); –

+1

А также вам нужно следующее разрешение в вашем файле манифеста ... \t

+0

У меня такая же проблема, можете ли вы увидеть это [ссылка] (http://stackoverflow.com/q/28271210/4358880) и помочь в решении проблемы. –

0

Я создал простую программу Java, с некоторым copy_paste кода других пользователей, но точка + является то, что он работает, я попробовал это б/ш LocalHost - SPark client - javaProgram

вы можете отправить TXT.файл другому пользователю, созданному в разделе пользователя OpenFile.

Примечание: пожалуйста, измените любую вещь, если хотите какие-либо детали в Xmpp.test класс.

Download Xmpp File Transfer "Java Code" From Here

+0

Я пробовал это, но эта строка всегда исключает: 'if (transfer.getStatus(). equals (Status.refused) \t \t \t \t || transfer.getStatus(). Equals (Status.error) \t \t \t \t || transfer.getStatus(). равно (Status.cancelled)) { \t \t \t System.out \t \t \t \t \t .println ("отказался отменить ошибку" + transfer.getError()); ', что означает даже, что это сделано, отправка файла не удалась. Я не понимаю, почему я продолжаю получать эту ошибку. –