gpt4 book ai didi

android - 使用JSch从Android上的SFTP文件传输进行慢速传输

转载 作者:行者123 更新时间:2023-12-02 14:09:08 25 4
gpt4 key购买 nike

我正在使用JSch在Android中执行SFTP下载。这是在具有802.11n的LAN和通过有线千兆连接的SFTP服务器上。在具有相同代码的笔记本电脑(也是802.11n)上,我的速度约为8兆字节/秒,但是在Android上,我的速度仅为40 KB /秒。是否有一些标志或我需要打开的东西才能使它更快地传输?我已经在Nexus 5和Nexus 6(均带有5.1)上进行了尝试。我尝试了几个应用程序,一个以230 KB /秒的速度下载了文件,另一个以40 KB /秒的速度下载了文件,所以我猜其中的一个与我有同样的问题。

这是我的代码:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread thread = new Thread() {
@Override
public void run() {
try {
JSch jsch = new JSch();

jsch.setConfig("StrictHostKeyChecking", "no");
Session session = jsch.getSession("ftptest", "192.168.1.205");

session.setPort(22);
session.setPassword("password");
session.connect();
ChannelSftp channel = (ChannelSftp) session.openChannel("sftp");
channel.connect();
SftpProgressMonitor monitor = new SftpProgressMonitor() {
long finalCount = 0;
long start = -1;

@Override
public void init(int op, String src, String dest, long max) {
start = System.currentTimeMillis();
}

@Override
public boolean count(long count) {
finalCount += count;
/* long took = (System.currentTimeMillis() - start) / 1000;
if (took > 0) {
Log.w("SFTP", "Transferred so far " + finalCount + " at speed bytes/sec " + (finalCount / took));
}*/
return true;
}

@Override
public void end() {
long took = (System.currentTimeMillis() - start) / 1000;
Log.w("SFTP", "Transferred " + finalCount + " in " + took + " speed bytes/sec " + (finalCount / took ));
}
};
InputStream stream = channel.get("file", monitor);
int read = -1;
byte[] bs = new byte[8192];
while((read = stream.read(bs)) >= 0){
//do nothing
}
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
thread.start();
}


}

编辑:如果我告诉它将流写入文件而不给我InputStream的话,它似乎要快得多(约160 KB /秒)。这两个 get方法之间的代码看起来非常不同,但是即使我走了那条路,160 kbytes / sec仍然比我希望的慢得多。

最佳答案

您正在测试哪个版本的Android?您能否在 shell 中插入adb并查看这些设置是什么(当您使用wifi时)?

cat /proc/sys/net/ipv4/tcp_rmem
cat /proc/sys/net/ipv4/tcp_wmem

然后,如果它们较低(例如“4092 8760 11680”),则尝试将它们设置为较大的值:
sudo echo "524288,1048576,2097152" > /proc/sys/net/ipv4/tcp_rmem
sudo echo "262144,524288,1048576" > /proc/sys/net/ipv4/tcp_wmem

然后再次尝试测试。

这可能是由于在某些情况下将wifi缓冲区设置得太小的错误( https://code.google.com/p/android/issues/detail?id=64706)。

关于android - 使用JSch从Android上的SFTP文件传输进行慢速传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com