2012-05-01 17 views
8

Problema: No se puede recibir un archivo enviado a mi aplicación de Android a través de XMPP y OpenFire Server. Sin embargo, puedo enviar un archivo con éxito. El tarro asmack que estoy usando es asmack-JSE-buddycloud-2010.12.11.jarAndroid File Transfer no funciona a través de XMPP y OpenFire

Código:

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 (Si el archivo se envía a través de chispa):

Error en la ejecución: - causado por: java.util.concurrent.ExecutionException: Sin respuesta desde el archivo iniciador de transferencia:

error (Si el archivo se envía a través de Adium):

java.util.concurrent.ExecutionException: No se pudo establecer toma con cualquier host proporcionado: Item- no encontraron-(404) no pudo establecer socket con cualquier huésped proporcionado

Error (Si el archivo se envía a través de otro ejemplo de mi aplicación):

error en la ejecución: - causada por: java.util.concurrent.ExecutionException: - causado por: Sin respuesta de cliente remoto:

Mis registros: (al intentar recibir archivos de chispa)

parece que estoy enviando este error! (No lo recibe). ¿Por qué sería esto?

> 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> 

Registros adicionales:

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

El XMPP estrofas antes del error 501 de ambos lados sería interesante. – Flow

+0

Gracias por su respuesta Flow. He agregado más registros de mi aplicación antes del 501. –

+0

Hola, @AndyA, ¿me pueden ayudar en este http://stackoverflow.com/questions/11666963/file-is-not-being-transferred-in-smack- api – juned

Respuesta

3

Uso

transfer.receiveFile(myLocalFile); 

en lugar de

InputStream stream = transfer.receive(); 

están bloqueando el hilo PacketReader. El primer método generará su propio hilo para leer los paquetes específicos que componen las partes del archivo que se transfieren. Si usa el segundo método, debe generar un hilo propio para hacer la lectura y escritura del archivo real.

+0

Esto funciona. El siguiente código se puede usar para leer el archivo. IncomingFileTransfer transfer = request.accept(); transfer.recieveFile (nuevo archivo (getExternalFilesDir (null), transfer.getFileName())); Línea de cadena; BufferedReader br = new BufferedReader (nuevo FileReader (nuevo archivo (getExternalFilesDir (null), transfer.getFileName()))); while ((line = br.readLine())! = null) System.out.println (línea); –

+1

Y también necesita el siguiente permiso en su archivo de manifiesto ... \t

+0

Me enfrenta el mismo problema, ¿puede ver más sobre este [enlace] (http://stackoverflow.com/q/28271210/4358880) y ayuda a resolver el problema –

0

He creado un programa simple de Java, con un poco de copy_paste de código de otros usuarios, pero el punto es + que se está trabajando, he intentado este b/w LocalHost - SPark client - javaProgram

puede enviar txt.archivo a otro usuario, creado en la sección de usuario de OpenFile.

Nota: por favor, cambie cualquier cosa si desea más detalles en la clase Xmpp.test .

Download Xmpp File Transfer "Java Code" From Here

+0

Lo he intentado pero esta línea siempre excutes: 'if (transfer.getStatus(). equal (Status.refused) \t \t \t \t || transfer.getStatus(). equals (Status.error) \t \t \t \t || transfer.getStatus(). equals (Status.cancelled)) { \t \t \t System.out \t \t \t \t \t .println ("se ha denegado el error cancelado" + transfer.getError()); ', lo que significa que aunque haya terminado, el envío del archivo ha fallado. No entiendo por qué sigo recibiendo este error. –

Cuestiones relacionadas