6
public void ReceiveFile() {

        ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);

        if (sdm == null)
        {
            sdm = new ServiceDiscoveryManager(connection);
            Log.e("service discovery", "SDM");
        sdm.addFeature("http://jabber.org/protocol/disco#info");

        sdm.addFeature("jabber:iq:privacy");
        }

        FileTransferManager manager = new FileTransferManager(connection);
        Log.e("after manager", "manager");
        manager.addFileTransferListener(new FileTransferListener() {
           public void fileTransferRequest(final FileTransferRequest request) {
              new Thread(){
                 @Override
                 public void run() {
                     Log.e("Thread running", "starting");
                    IncomingFileTransfer transfer = request.accept();
                    File mf = Environment.getExternalStorageDirectory();
                    Log.e("path", mf.getAbsoluteFile()+"/DCIM/" + transfer.getFileName());
                    File file = new File(mf.getAbsoluteFile()+"/DCIM/" + transfer.getFileName());

                    try{
                        transfer.recieveFile(file);
                        while(!transfer.isDone()) {
                           try{
                              Thread.sleep(1000L);
                           }catch (Exception e) {
                              Log.e("", e.getMessage());
                           }
                           if(transfer.getStatus().equals(org.jivesoftware.smackx.filetransfer.FileTransfer.Status.error)) {
                              Log.e("ERROR!!! ", transfer.getError() + "");
                           }
                           if(transfer.getException() != null) {
                              transfer.getException().printStackTrace();
                              Log.e("not null", "print stack success");
                           }
                        }
                     }catch (Exception e) {
                        Log.e("", e.getMessage());
                    }
                 };
               }.start();
            }
         });    
    }

    public void sndFile(final String path, final String receiver) {
        ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);

        if (sdm == null)
        {
            sdm = new ServiceDiscoveryManager(connection);
            Log.e("service discovery", "SDM");
        sdm.addFeature("http://jabber.org/protocol/disco#info");

        sdm.addFeature("jabber:iq:privacy");
        }

        FileTransferManager manager = new FileTransferManager(connection);
        OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(receiver+"/Smack");
        File file = new File(path);
        try {
           transfer.sendFile(file, "test_file");
        } catch (XMPPException e) {
           e.printStackTrace();
        }
        while(!transfer.isDone()) {
           if(transfer.getStatus().equals(org.jivesoftware.smackx.filetransfer.FileTransfer.Status.error)) {
              System.out.println("ERROR!!! " + transfer.getError());
              Log.e("while status error", "error");

           } else if (transfer.getStatus().equals(org.jivesoftware.smackx.filetransfer.FileTransfer.Status.refused)
                            || transfer.getStatus().equals(org.jivesoftware.smackx.filetransfer.FileTransfer.Status.cancelled)) {
              System.out.println("Cancelled!!! " + transfer.getError());
              Log.e("while Cancelled", "cancel refuse");
           }
           try {
              Thread.sleep(1000L);
           } catch (InterruptedException e) {
              e.printStackTrace();
           }
        }
        if(transfer.getStatus().equals(org.jivesoftware.smackx.filetransfer.FileTransfer.Status.refused) || transfer.getStatus().equals(org.jivesoftware.smackx.filetransfer.FileTransfer.Status.error)
         || transfer.getStatus().equals(org.jivesoftware.smackx.filetransfer.FileTransfer.Status.cancelled)){
           System.out.println("refused cancelled error " + transfer.getError());
           Log.e("if cancelled", "refused cancel");

        } else {
           System.out.println("Success");
           Log.e("if no error", "Success");
           j=0;
           arrList_messages.add("File "+transfer.getFileName()+"Sent");
           arrList_messages.add(" ");
           setListAdapter();
         setListAdapterGreen();
        }
    }

LOGCAT 接收:

06-19 11:22:41.911: E/ERROR!!!(15386): null
06-19 11:22:41.912: W/System.err(15386): Error in execution: 
06-19 11:22:41.912: W/System.err(15386):   -- caused by: java.util.concurrent.ExecutionException: 
06-19 11:22:41.912: W/System.err(15386):   -- caused by: No response from remote client: 
06-19 11:22:41.912: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:199)
06-19 11:22:41.912: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.access$100(IncomingFileTransfer.java:47)
06-19 11:22:41.912: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$1.run(IncomingFileTransfer.java:124)
06-19 11:22:41.912: W/System.err(15386):    at java.lang.Thread.run(Thread.java:856)
06-19 11:22:41.912: W/System.err(15386): Nested Exception: 
06-19 11:22:41.912: W/System.err(15386): java.util.concurrent.ExecutionException: 
06-19 11:22:41.912: W/System.err(15386):   -- caused by: No response from remote client: 
06-19 11:22:41.913: W/System.err(15386):    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:233)
06-19 11:22:41.913: W/System.err(15386):    at java.util.concurrent.FutureTask.get(FutureTask.java:90)
06-19 11:22:41.913: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:193)
06-19 11:22:41.913: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.access$100(IncomingFileTransfer.java:47)
06-19 11:22:41.913: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$1.run(IncomingFileTransfer.java:124)
06-19 11:22:41.913: W/System.err(15386):    at java.lang.Thread.run(Thread.java:856)
06-19 11:22:41.913: W/System.err(15386):   -- caused by: No response from remote client: 
06-19 11:22:41.914: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.FaultTolerantNegotiator.createIncomingStream(FaultTolerantNegotiator.java:113)
06-19 11:22:41.914: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$2.call(IncomingFileTransfer.java:186)
06-19 11:22:41.914: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$2.call(IncomingFileTransfer.java:183)
06-19 11:22:41.914: W/System.err(15386):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-19 11:22:41.914: W/System.err(15386):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-19 11:22:41.914: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:190)
06-19 11:22:41.914: W/System.err(15386):    ... 3 more
06-19 11:22:41.914: E/not null(15386): print stack success
06-19 11:22:41.914: E/ERROR!!!(15386): null
06-19 11:22:41.914: W/System.err(15386): Error in execution: 
06-19 11:22:41.914: W/System.err(15386):   -- caused by: java.util.concurrent.ExecutionException: 
06-19 11:22:41.914: W/System.err(15386):   -- caused by: No response from remote client: 
06-19 11:22:41.915: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:199)
06-19 11:22:41.915: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.access$100(IncomingFileTransfer.java:47)
06-19 11:22:41.915: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$1.run(IncomingFileTransfer.java:124)
06-19 11:22:41.915: W/System.err(15386):    at java.lang.Thread.run(Thread.java:856)
06-19 11:22:41.915: W/System.err(15386): Nested Exception: 
06-19 11:22:41.915: W/System.err(15386): java.util.concurrent.ExecutionException: 
06-19 11:22:41.915: W/System.err(15386):   -- caused by: No response from remote client: 
06-19 11:22:41.915: W/System.err(15386):    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:233)
06-19 11:22:41.915: W/System.err(15386):    at java.util.concurrent.FutureTask.get(FutureTask.java:90)
06-19 11:22:41.915: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:193)
06-19 11:22:41.915: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.access$100(IncomingFileTransfer.java:47)
06-19 11:22:41.915: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$1.run(IncomingFileTransfer.java:124)
06-19 11:22:41.915: W/System.err(15386):    at java.lang.Thread.run(Thread.java:856)
06-19 11:22:41.916: W/System.err(15386):   -- caused by: No response from remote client: 
06-19 11:22:41.916: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.FaultTolerantNegotiator.createIncomingStream(FaultTolerantNegotiator.java:113)
06-19 11:22:41.916: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$2.call(IncomingFileTransfer.java:186)
06-19 11:22:41.916: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$2.call(IncomingFileTransfer.java:183)
06-19 11:22:41.916: W/System.err(15386):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-19 11:22:41.916: W/System.err(15386):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-19 11:22:41.916: W/System.err(15386):    at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:190)
06-19 11:22:41.916: W/System.err(15386):    ... 3 more
06-19 11:22:41.916: E/not null(15386): print stack success

LOGCAT 发送:

aller requests to read 6415 bytes timeout=0...
06-19 11:25:30.621: D/NativeCrypto(15386): Doing SSL_Read() ssl=0x691328, appData=0x773788
06-19 11:25:30.621: D/NativeCrypto(15386): Returned from SSL_Read() with result -1, error code 2 ssl=0x691328, appData=0x773788
06-19 11:25:30.621: D/NativeCrypto(15386): sslSelect type=READ fd=61 appData=0x773788 timeout=0
06-19 11:25:30.860: D/NativeCrypto(15386): sslSelect READ fd=61 appData=0x773788 timeout=0 => 1
06-19 11:25:30.860: D/NativeCrypto(15386): Doing SSL_Read() ssl=0x691328, appData=0x773788
06-19 11:25:30.860: D/NativeCrypto(15386): Returned from SSL_Read() with result 222, error code 0 ssl=0x691328, appData=0x773788
06-19 11:25:30.863: D/NativeCrypto(15386): Entering sslRead, caller requests to read 6193 bytes timeout=0...
06-19 11:25:30.863: D/NativeCrypto(15386): Doing SSL_Read() ssl=0x691328, appData=0x773788
06-19 11:25:30.863: D/NativeCrypto(15386): Returned from SSL_Read() with result -1, error code 2 ssl=0x691328, appData=0x773788
06-19 11:25:30.863: D/NativeCrypto(15386): sslSelect type=READ fd=61 appData=0x773788 timeout=0
06-19 11:25:31.088: I/System.out(15386): refused cancelled error null
06-19 11:25:31.088: E/if cancelled(15386): refused cancel
06-19 11:25:31.088: E/after manager(15386): manager
06-19 11:25:39.797: I/System.out(15386): close [socket][/0.0.0.0:-1]
4

0 回答 0