Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smack Android-SOCKS5协商失败_Android_Xmpp_Smack - Fatal编程技术网

Smack Android-SOCKS5协商失败

Smack Android-SOCKS5协商失败,android,xmpp,smack,Android,Xmpp,Smack,我为下面的问题苦苦挣扎了很长时间,但根本解决不了。我正在尝试使用smack for Android通过xmpp进行文件传输,代码如下: fTManager = FileTransferManager.getInstanceFor(connection); fTManager.addFileTransferListener(new FileTransferListener() { @Override publi

我为下面的问题苦苦挣扎了很长时间,但根本解决不了。我正在尝试使用smack for Android通过xmpp进行文件传输,代码如下:

fTManager = FileTransferManager.getInstanceFor(connection);
            fTManager.addFileTransferListener(new FileTransferListener() {
                @Override
                public void fileTransferRequest(FileTransferRequest fileTransferRequest) {
                    String requerstor = fileTransferRequest.getRequestor();
                    try {
                        IncomingFileTransfer transfer = fileTransferRequest.accept();
                        transfer.recieveFile(new File(getExternalFilesDir(null), transfer.getFileName()));

                        bufferedReader = new BufferedReader(new FileReader(new File(getExternalFilesDir(null), transfer.getFileName())));
                        String line;
                        while ((line = bufferedReader.readLine()) != null)
                            Log.i("Line", "LINE " + line);
                        while (!transfer.isDone()) {
                            Thread newThread = new Thread();
                            Log.i("FileTransferManager", "File transfer is " + String.format("%1$,.2f", transfer.getProgress() * 100) + "% complete.");
                            try {
                                newThread.sleep(1000);
                            } catch (InterruptedException e) {e.printStackTrace();}
                        }

                        if (transfer.isDone())
                            Log.i("FileTransferManager", "Transfer status is:" + transfer.getStatus());
                        if (transfer.getError() != null)
                            Log.i("FileTransferManager", "Transfer error occurred:" + transfer.getError().getMessage());
                        if(transfer.getException() != null)
                            transfer.getException().printStackTrace();
                        }
                     catch (SmackException e) {e.printStackTrace();}
                     catch (IOException e) { e.printStackTrace();}
如果我收到一个文件传输请求,可以显示请求者和文件名。但是如果
transfer.receivefile(新文件(getExternalFilesDir(null),transfer.getFileName())

如果发生以下错误,则应执行:

03-23 12:47:37.890      888-916/? W/System.err﹕ org.jivesoftware.smack.SmackException: Error in execution
    03-23 12:47:37.890      888-916/? W/System.err﹕ at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:199)
    03-23 12:47:37.900      888-916/? W/System.err﹕ at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.access$100(IncomingFileTransfer.java:57)
    03-23 12:47:37.900      888-916/? W/System.err﹕ at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$1.run(IncomingFileTransfer.java:129)
    03-23 12:47:37.900      888-916/? W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
    03-23 12:47:37.900      888-916/? W/System.err﹕ Caused by: java.util.concurrent.ExecutionException: org.jivesoftware.smack.SmackException: SOCKS5 negotiation failed
    03-23 12:47:37.920      888-916/? W/System.err﹕ at java.util.concurrent.FutureTask.report(FutureTask.java:93)
    03-23 12:47:37.920      888-916/? W/System.err﹕ at java.util.concurrent.FutureTask.get(FutureTask.java:177)
    03-23 12:47:37.920      888-916/? W/System.err﹕ at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:193)
    03-23 12:47:37.930      888-916/? W/System.err﹕ ... 3 more
    03-23 12:47:37.930      888-916/? W/System.err﹕ Caused by: org.jivesoftware.smack.SmackException: SOCKS5 negotiation failed
    03-23 12:47:37.930      888-916/? W/System.err﹕ at org.jivesoftware.smackx.bytestreams.socks5.Socks5Client$1.call(Socks5Client.java:105)
    03-23 12:47:37.930      888-916/? W/System.err﹕ at org.jivesoftware.smackx.bytestreams.socks5.Socks5Client$1.call(Socks5Client.java:80)
    03-23 12:47:37.940      888-916/? W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    03-23 12:47:37.940      888-916/? W/System.err﹕ ... 1 more

我正在使用smack-4.1.0-rc4。有人能给我线索吗?如果您能给我一些建议,我将不胜感激。

您有什么解决方案吗?问题似乎出在服务器端。如果两个客户端在同一个网络中,文件传输确实有效,但如果其中一个客户端不在网络中,则会显示上述错误消息。当我通过鸽子测试它时,它也工作得很好,即使两个客户端不在同一个网络中。这是可能的,因为鸽子使用代理,如果两个客户端不在同一个网络中。因此,我的建议是在将客户端连接到服务器时,将代理导入服务器并注册它。我不知道是否有更优雅的解决方案,如果有,请告诉我,但有了代理它确实有效。谢谢@Piuma的回复。