2012-05-01 4 views
8

Problem: Ich kann keine Datei empfangen, die über XMPP und OpenFire Server an meine Android App gesendet wurde. Ich kann jedoch erfolgreich eine Datei senden. Die asmack jar ich verwende ist asmack-jse-Buddycloud-2010.12.11.jarAndroid File Transfer funktioniert nicht über XMPP und OpenFire

-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(); 
     } 
} 

Fehler (Wenn die Datei über Spark- gesendet wird):

Fehler bei der Ausführung: - verursacht durch: java.util.concurrent.ExecutionException: Keine Antwort von Datei Übertragungs Initiator:

Error (Wenn Datei über Adium gesendet wird):

java.util.concurrent.ExecutionException: Es konnte keine Buchse herstellen mit jedem Host bereitgestellt: Item- nicht gefunden (404) Buchse nicht herstellen könnte mit jedem Host bereitgestellt

Fehler (Wenn die Datei über eine andere Instanz meiner App gesendet wird):

Fehler bei der Ausführung: - verursacht durch: java.util.concurrent.ExecutionException: - verursacht durch: Keine Antwort von Remote-Client:

Meine Protokolle: (Bei dem Versuch, Datei Spark zu erhalten)

Es scheint, dass ich diesen Fehler schicke! (Nicht erhalten). Warum sollte das sein?

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

Zusatzprotokolle:

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

Die XMPP Strophen, bevor die 501 Fehler von beiden Seiten interessant wären. – Flow

+0

Danke für Ihre Antwort Flow. Ich habe mehr Protokolle von meiner App vor dem 501 hinzugefügt. –

+0

hi @AndyA können Sie mir auf dieser http://stackoverflow.com/questions/11666963/file-is-not-being-transfer-in-smack- helfen api – juned

Antwort

3

Verwenden

transfer.receiveFile(myLocalFile); 

statt

InputStream stream = transfer.receive(); 

Sie blockieren den PacketReader Faden. Die erste Methode erzeugt einen eigenen Thread, um die spezifischen Pakete zu lesen, aus denen die Teile der Datei bestehen. Wenn Sie die zweite Methode verwenden, müssen Sie einen eigenen Thread erstellen, um die eigentliche Datei lesen und schreiben zu können.

+0

Dies funktioniert. Der folgende Code kann zum Lesen der Datei verwendet werden. IncomingFileTransfer-Übertragung = request.accept(); transfer.recieveFile (neue Datei (getExternalFilesDir (null), transfer.getFileName())); String-Linie; BufferedReader br = neuer BufferedReader (neuer FileReader (neue Datei (getExternalFilesDir (null), transfer.getFileName()))); while ((line = br.readLine())! = null) System.out.println (Zeile); –

+1

Und auch Sie brauchen die folgende Erlaubnis in Ihrer Manifest-Datei ... \t

+0

Ich stehe vor dem gleichen Problem, können Sie darüber [Link] (http://StackOverflow.com/q/28271210/4358880) und helfen bei der Lösung des Problems –

0

Ich habe ein einfaches Programm von Java, mit einigen copy_paste von anderen Benutzern Code erstellt, aber der + Punkt ist, dass es funktioniert, ich kann dieses B versucht haben/w LocalHost - SPark client - javaProgram

Sie txt schicken.Datei an einen anderen Benutzer, erstellt in openFile User Section.

Hinweis: Bitte ändern Sie jede Sache, wenn Sie irgendwelche Details in Xmpp.test Klasse wünschen.

Download Xmpp File Transfer "Java Code" From Here

+0

Ich habe es versucht, aber diese Zeile immer aus: 'if (transfer.getStatus(). equals (Status.refused) \t \t \t \t || transfer.getStatus(). equals (status.fehler) \t \t \t \t || transfer.getStatus(). equals (Status.cancelled)) { \t \t \t System.out \t \t \t \t \t .println ("Abgelehnt abgebrochener Fehler" + transfer.getError()); ', was sogar bedeutet, dass die Dateiversendung fehlgeschlagen ist. Ich verstehe nicht, warum ich diesen Fehler bekomme. –